2012-05-02 114 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 –