鉴于我有以下内容TestFixture
with 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
and 0
.
我发现使用对象数组传递信息时很容易感到困惑,当然,它不是类型安全的。即使它不会让您感到困惑,它也可能会让那些阅读您代码的人感到困惑。
我倾向于做这样的事情......
public static IEnumerable<TestCaseData> DecimalTestData { get; } = new[]
{
new TestCaseData(0m, 0),
...
}
我发现它更具可读性,而且它还让您有机会执行诸如分配测试名称、忽略某些测试等操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)