首先,以防您的活动返回一个值,刚刚从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。
我发现这个链接很好用:http://daysincode.blogspot.co.uk/2012/05/unit-test-of-workflow-for-code-action.html – cpoDesign
这基本上是一样的想法我在回答中展示了你。只需使用'CodeActivity'来执行具有唯一返回值的活动。大部分都是。然后,您可以轻松使用'WorkflowInvoker.Invoke ()'获取值 –
Joao
它们也更容易进行单元测试,正如您可以通过我的代码与博客文章的代码之间的差异所看到的一样。 – Joao