我正在使用多个TestCaseSource属性。是否可以确定哪个值来自哪个来源?
代码示例:
[TestCaseSource(CountryListA)]
[TestCaseSource(CountryListB)]
public void SomeTest(Country country){
...tests on country...
// access the source (either CountryListA or CountryListB)
}
访问源有多种原因,例如,我需要检查该列表中的国家/地区是唯一的,或者如果出现问题,我想记录测试失败的源/国家。
答案 0 :(得分:0)
简短的回答:否。事实上,NUnit旨在使这一点变得不可能。测试基本上不应该知道其论证来自何方或由谁提供。在某些高级测试生成方案以及[Theory]
测试中,这一点很重要。
解决此问题的一般方法是采取步骤,以确保测试的名称唯一。任何重复项,无论是在同一列表中还是在两个列表之间,都无法准确确定问题的出处。
关键问题是显然重复测试是否为真实重复。您将不会知道,除非每个返回的参数的Type以允许您确定确切大小写的方式覆盖ToString()
。例如,如果Country
是一个没有ToString
覆盖的类,则测试的每个实例都将被命名为SomeTest(<Country>)
之类。 OTOH,如果Country
是enum
或以独特的方式覆盖其ToString()
,这将不是问题。
就您而言,有一种相对简单的方法为测试提供唯一的全名,即使显示名称相同。
将所有测试放在抽象的基类中。
从该基座派生两个不同的灯具。
在其中一个灯具中使用CountryListA
,在另一个灯具中使用CountryListB
。
也就是说,在我看来,更好的方法是保持当前结构并使测试用例更易于识别。