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