为什么当我提供 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?
鉴于我有以下 TestFixture
和 TestCase
参数作为 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.
我以相同的方式编写了更复杂的数据驱动单元测试,其中每个参数都是自定义 struct
的 IEnumerable
我制作的 运行 ],那么为什么 N-Unit 对应该更简单的单元测试有问题?
您没有向该方法传递两个参数,而是只有一个。例如,第一个调用传递一个 object[]
包含两个值,0m
和 0
.
我发现使用对象数组传递信息时很容易混淆,当然,它不是类型安全的。即使它不会让您感到困惑,也可能会让那些阅读您的代码的人感到困惑。
我倾向于做这样的事情...
public static IEnumerable<TestCaseData> DecimalTestData { get; } = new[]
{
new TestCaseData(0m, 0),
...
}
我发现它更具可读性,它还让您有机会执行诸如分配测试名称、忽略某些测试等操作。
鉴于我有以下 TestFixture
和 TestCase
参数作为 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.
我以相同的方式编写了更复杂的数据驱动单元测试,其中每个参数都是自定义 struct
的 IEnumerable
我制作的 运行 ],那么为什么 N-Unit 对应该更简单的单元测试有问题?
您没有向该方法传递两个参数,而是只有一个。例如,第一个调用传递一个 object[]
包含两个值,0m
和 0
.
我发现使用对象数组传递信息时很容易混淆,当然,它不是类型安全的。即使它不会让您感到困惑,也可能会让那些阅读您的代码的人感到困惑。
我倾向于做这样的事情...
public static IEnumerable<TestCaseData> DecimalTestData { get; } = new[]
{
new TestCaseData(0m, 0),
...
}
我发现它更具可读性,它还让您有机会执行诸如分配测试名称、忽略某些测试等操作。