2012-05-08 27 views
0

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

我已经确定的问题,因为扩展试图解决执行和返回的错误信息:

“不设置到对象的实例对象引用。”

我的类:

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

回答

0

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

这是我能做的最好的。因为我有基类,它们被注入,但我不能轻易实现我所需要的。

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

0

而不是使用静态WorkflowInvoker.Invoke()新增了一个WorkflowInvoker实例并添加一个模拟,或者你的测试需要的任何东西,lib.Extension.MyExtenstion t o扩展集合。

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

    // .... 

} 
相关问题