2012-05-02 7 views
8

コード化されたアクティビティを作成しましたが、今は単体テストしたいのですが、どのようにしたらよいか分かりません。 いずれの例もわかります。WFコードアクティビティのユニットテスト

私の簡単な例は以下のとおりです。すべての

public sealed class ParameterActivity : CodeActivity 
{ 
    public InArgument<int> Argument1 { get; set; } 
    public InArgument<int> Argument2 { get; set; } 
    public OutArgument<int> Result { get; set; } 

    protected override void Execute(CodeActivityContext context) 
    { 
     var a = context.GetValue(Argument1); 
     var b = context.GetValue(Argument2); 

     context.SetValue(Result, a + b); 
    } 
} 
+0

私はこのリンクを見つけました。これは役に立ちました:http://daysincode.blogspot.co.uk/2012/05/unit-test-of-workflow-for-code-action.html – cpoDesign

+0

これは基本的に同じ考えです私は私の答えであなたを示した。一意の戻り値を持つアクティビティに 'CodeActivity 'を使用してください。ほとんどの場合。次に、 'WorkflowInvoker.Invoke ()'を使って簡単に値 – Joao

+0

を取得することができます。私のコードとブログ投稿のコードとの違いからわかるように、単体テストも簡単です。 – Joao

答えて

17

まず、あなたの活動が単一の値を返す場合には、ちょうどCodeActivity<TResult>から継承し、簡単には(実行上書き) TResultと戻り値の型として。また、すでにOutArgument<TResult> Resultをご利用いただけます。言われていること

public sealed class ParameterActivity : CodeActivity<int> 
{ 
    public InArgument<int> Argument1 { get; set; } 
    public InArgument<int> Argument2 { get; set; } 

    protected override int Execute(CodeActivityContext context) 
    { 
     var a = Argument1.Get(context); 
     var b = Argument2.Get(context); 

     return a + b; 
    } 
} 

WorkflowInvokerは、ユニットテストにほとんどすべてのあなたの活動を移動するための方法です。一例として、カスタムコードアクティビティの上撮影:

[TestFixture] 
public TParameterActivity 
{ 
    [Test] 
    public void ParameterActivity_Test001() 
    { 
     var activity = new ParameterActivity(); 

     var input1 = new Dictionary<string, object> 
     { 
      { "Argument1", 10 }, 
      { "Argument2", 5 } 
     }; 

     var input2 = new Dictionary<string, object> 
     { 
      { "Argument1", -13 }, 
      { "Argument2", 3 } 
     }; 

     var output1 = WorkflowInvoker.Invoke<int>(activity, input1); 
     var output2 = WorkflowInvoker.Invoke<int>(activity, input2); 

     Assert.That(output1, Is.EqualTo(15)); 
     Assert.That(output2, Is.EqualTo(-10)); 
    } 
} 

よりもむしろWorkflowInvokerあなたにも使用することができますWorkflowApplicationしかし、あなたはちょうどすぐに短命ワークフローを呼び出したいときに、すべての必要ないないようですユニットテストのために彼らが "自分のこと"をして帰ってくるのです。非同期のワークフローやブックマークのようなもっと精巧なものをテストしたいのでない限り。

またMicrosoft.Activities.UnitTestingをチェックしたいと思います。

+1

Microsoft.Activities.UnitTestingの使用方法を確認してください。同様にhttp://wf.codeplex.com/wikipage?title=How%20do%20I%20use%20Microsoft.Activities.UnitTesting&referringTitle=Microsoft.Activities.UnitTesting%20Overview –