NUnit TestCaseData 的参数数量错误

Bar*_*urg 4 c# nunit unit-testing

我正在尝试为我的测试设置一些测试用例:

public IEnumerable<TestCaseData> size_tests()
{
    yield return new TestCaseData(new string[] { "XS", "XL", "M" })
        .Returns(new SortedVariantAttributeModel {
            Values = new string[] { "XS", "M", "XL" },
            PrimaryValue = "XS"
        });
}

[Test, TestCaseSource("size_tests")]
public SortedVariantAttributeModel Should_map_SortedVariantAttributes(string[] sizes)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此测试时,我得到:

测试失败 - Should_map_SortedVariantAttributes("XS","XL","M")

消息:提供的参数数量错误

从错误来看,它似乎解开了数组并尝试将其应用于测试函数,但这当然会导致问题。我该如何解决这个问题?

Rob*_*use 5

要使其正常工作,您需要将参数包装在一个数组中,如下所示new[] { new string[] { "XS", "XL", "M" } }:这会导致 NUnit 将字符串数组视为方法的第一个参数,而不是一系列字符串参数。

我相信您正在使用 NUnit 2.x,因为您的数据源不是静态的。我简化了您的代码并在 NUnit 2.6.4 和 3.4.1 中测试了解决方法。

public static IEnumerable<TestCaseData> Data()
{
    yield return new TestCaseData(new[] { new string[] { "XS", "XL", "M" } });
    yield return new TestCaseData(new[] { new string[] { "S", "M", "XXL", "L" } });
}

[TestCaseSource(nameof(Data))]
public void TestStringArrayArguments(string[] sizes)
{
    Assert.That(sizes.Length, Is.GreaterThan(1));
}
Run Code Online (Sandbox Code Playgroud)