使用GetExtension创建代码活动单元测试

时间:2012-05-08 15:34:15

标签: unit-testing workflow workflow-foundation-4 mstest

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

我已经发现问题,因为Extension正在尝试解决实现并返回错误消息:

  

“对象引用未设置为对象的实例。”

我的课程:

 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);
    }

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);

    // ....

}

答案 2 :(得分:0)

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

这是我能为此做的最好的事情。由于我有基类,这是注入的,但我不能轻易实现我需要的。

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