0

如何基于集成组件创建带有上下文的单元测试?

我已经确定了问题,因为扩展正在尝试解决实现并返回错误消息:

“你调用的对象是空的。”

我的课:

 public sealed class GetListOfServiceIdsToProcess
{
   public InOutArgument<IArguments> Arguments { get; set; }

    protected override void Execute(CodeActivityContext context)
    {

        // I am recieving my error exception here
        context.GetExtension<lib.Extension.MyExtenstion>();

        var targetIds= (List<int>)Settings.Get("targetIds");

        var wfa = this.Arguments.Get(context);
        wfa.ListTargetIds = targetIds;

        Arguments.Set(context, wfa);            
    }
}

到目前为止我的测试:

据我所知,我对测试的实施有疑问:

    /// <summary>
    ///A test for Execute
    ///</summary>
    [TestMethod()]
    public void ExecuteTest()
    {
        // create Isettings mock to return collection of service ids

        var expected = new List<int>() { 30, 20 };

        var wfaInput = new TestWorkFlow();

        var serviceIdList = new GetListOfServiceIdsToProcess();
        var wfParam = new Dictionary<string, object>();
        wfParam.Add("WorkFlowArguments", wfaInput);

        var results = WorkflowInvoker.Invoke(serviceIdList, wfParam);
        var wfaResult = (IWorkFlowArguments)results["WorkFlowArguments"];

        Assert.AreEqual(expected, wfaResult.ListOfServiceIdsToProcess);
    }
4

3 回答 3

0

而不是使用静态 WorkflowInvoker.Invoke() 新建一个 WorkflowInvoker 实例并添加一个模拟或任何测试所需的 lib.Extension.MyExtenstion 到 Extensions 集合。

于 2012-05-08T15:36:40.173 回答
0
[TestMethod]
public void ExecuteTest()
{
    // ...

    var invoker = new WorkflowInvoker(activityToTest); 

    // This way your extension will be available during execution
    invoker.Extensions.Add(new MyExtension());

    var results = invoker.Invoke(inputArgs);

    // ....

}
于 2012-05-08T16:31:29.977 回答
0

我已经经历了多个选项,而我遇到的问题是 MS Workflow。我已经将所有逻辑从工作流代码活动中提取到单独的类中,并且这个类已经过测试。

这是我能做的最好的。因为我有注入的基类,但我无法轻松实现我需要的东西。

无论如何,谢谢大家的帮助。

于 2012-07-14T11:52:44.507 回答