为什么当我提供 2 个参数时 NUnit 告诉我 "Not enough arguments provided, provide at least 2 arguments."?

Why does NUnit tell me "Not enough arguments provided, provide at least 2 arguments." when I'm providing 2 arguments?

鉴于我有以下 TestFixtureTestCase 参数作为 decimal, int 对(因为 C# 不直接在属性中支持 decimal)。

[TestFixture]
public static class GetNumberOfSignificantDecimalPlacesTests
{
    public static IEnumerable<object[]> DecimalTestData { get; } = new[]
    {
        new object[]
        {
            new[]
            {
                0m,
                0
            }
        },
        new object[]
        {
            new[]
            {
                0.1m,
                1
            }
        },
        new object[]
        {
            new[]
            {
                -0.1m,
                1
            }
        }
    };

    [TestCaseSource(nameof(DecimalTestData))]
    public static void ShouldIdentifyTheCorrectNumberOfDecimalPlaces(decimal @decimal, int expected)
        => Assert.AreEqual
        (
            expected,
            Math.DigitExtensions.GetNumberOfSignificantDecimalPlaces(@decimal)
        );

当我尝试 运行 这些测试时,为什么我从 N-Unit 得到以下异常?

Not enough arguments provided, provide at least 2 arguments.

我以相同的方式编写了更复杂的数据驱动单元测试,其中每个参数都是自定义 structIEnumerable 我制作的 运行 ],那么为什么 N-Unit 对应该更简单的单元测试有问题?

您没有向该方法传递两个参数,而是只有一个。例如,第一个调用传递一个 object[] 包含两个值,0m0.

我发现使用对象数组传递信息时很容易混淆,当然,它不是类型安全的。即使它不会让您感到困惑,也可能会让那些阅读您的代码的人感到困惑。

我倾向于做这样的事情...

public static IEnumerable<TestCaseData> DecimalTestData { get; } = new[]
{
    new TestCaseData(0m, 0),
    ...
}

我发现它更具可读性,它还让您有机会执行诸如分配测试名称、忽略某些测试等操作。