【问题标题】:Windows Workflow Foundation multiple RequiredArgument fields validation orderWindows Workflow Foundation 多个 RequiredArgument 字段验证顺序
【发布时间】:2017-06-16 17:02:20
【问题描述】:

我正在使用分布式 WF 应用程序,我在其中创建了几个自己的活动。其中一些具有我想测试的强制性 InArguments。 我想要实现的是在没有任何 InArgument 的情况下执行活动,并使用我希望抛出的动态生成的异常消息断言预期的 ArgumentException 异常消息。

作为一个例子,让我们有以下活动

public class MyActivity : CodeActivity<bool>
{
    public MyActivity()
    {
        // some logic
    }

    [RequiredArgument]
    public InArgument<string> ArgA { get; set; }

    [RequiredArgument]
    public InArgument<string> ArgB { get; set; }

    [RequiredArgument]
    public InArgument<string> ArgC { get; set; }
}

我将 NUnit 与 Microsoft.Activities.UnitTesting 结合使用

[TestFixture]
public class MyActivityTests
{
    [Test]
    public void ValidateContainsMandatoryFields()
    {
        var activity = new MyActivity();
        var mandatoryFields = new ReadOnlyCollection<string>(new [] { "ArgA", "ArgB", "ArgC" });
        var expectedExceptionMsg = GenerateMsg(activity.DisplayName, mandatoryFields);
        var sut = new WorkflowInvokerTest(activity);
        var ex = Assert.Throws<ArgumentException>(delegate { sut.TestActivity(); });
        Assert.AreEqual(expectedExceptionMsg, ex.Message);
    }

    private string GenerateMsg(string displayName, IReadOnlyCollection<string> mandatoryFieldsNames)
    {
        var sb = new StringBuilder(@"The values provided for the root activity's arguments did not satisfy the root activity's requirements:");

        foreach (var fieldName in mandatoryFieldsNames)
        {
            sb.Append(string.Format("\r\n'0': Value for a required activity argument '{1}' was not supplied.", displayName, fieldName));
        }

        sb.Append("\r\nParameter name: rootArgumentvalues");
        return sb.ToString()
    }
}

问题我面临的问题是,我确实希望 InArguments 按字母顺序(argA、argB、argC)排序,但由于某种原因,字段的排序在我看来是随机(但总是以相同的顺序)。就我而言,例如,argB、argA、argC。

有没有我遗漏的订单?

【问题讨论】:

    标签: workflow-foundation-4 workflow-foundation


    【解决方案1】:

    我认为您正在编写一个测试来测试错误消息的格式,而不是哪些字段实际上是强制性的。必填字段列表不一定会在内部存储为列表,因此无法保证如何从集合中读取它们。

    我会编写 4 个测试用例,在其中为所有参数提供值,然后在每个测试用例中漏掉每个参数,确认抛出异常并且这些错误消息包含预期参数的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2019-05-24
      • 2010-09-06
      相关资源
      最近更新 更多