我已经创建了编码活动,现在我想对它进行单元测试,但我不知道如何。 任何例子都将不胜感激。
我的简单示例如下。
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 :(得分:18)
首先,如果您的活动返回单个值,只需继承 CodeActivity<TResult> ,然后使用 TResult <轻松覆盖 Execute() / em>作为返回类型。此外,您已经可以使用 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 。