【问题标题】:Unit testing of WF code activityWF代码活动的单元测试
【发布时间】:2012-05-02 21:45:58
【问题描述】:

我已经创建了编码活动,现在我想对其进行单元测试,但我不知道如何。 任何示例将不胜感激。

下面是我的简单示例。

  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);
    }
}

【问题讨论】:

  • 我发现这个链接非常有用:daysincode.blogspot.co.uk/2012/05/…
  • 这与我在回答中向您展示的想法基本相同。只需将CodeActivity&lt;TResult&gt; 用于具有唯一返回值的活动。大多数都这样做。然后就可以很方便的使用WorkflowInvoker.Invoke&lt;TResult&gt;()来获取值了
  • 它们也更容易进行单元测试,从我的代码与博文代码之间的差异可以看出。

标签: unit-testing workflow-foundation-4


【解决方案1】:

首先,如果您的活动返回单个值,只需从 CodeActivity<TResult> 继承并轻松地用 TResult 覆盖 Execute() > 作为返回类型。此外,您已经可以使用 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 sealed class ParameterActivityTests
{
    [Test]
    public void ParameterActivity_Test()
    {
        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));
    }
}

您也可以使用 WorkflowApplication 而不是 WorkflowInvoker,但是对于单元测试,当您只想快速调用short-活的工作流程让他们做“他们的事”并返回。除非您想测试更复杂的东西,例如异步工作流和/或书签。

您还需要检查 Microsoft.Activities.UnitTesting

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多