2012-05-08 38 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); 

    // .... 

} 
相關問題