如何确定来自哪个TestCaseSource值?

时间:2019-11-04 08:49:14

标签: nunit

我正在使用多个TestCaseSource属性。是否可以确定哪个值来自哪个来源?

代码示例:

[TestCaseSource(CountryListA)]
[TestCaseSource(CountryListB)]
public void SomeTest(Country country){
   ...tests on country...
// access the source (either CountryListA or CountryListB)
}

访问源有多种原因,例如,我需要检查该列表中的国家/地区是唯一的,或者如果出现问题,我想记录测试失败的源/国家。

1 个答案:

答案 0 :(得分:0)

简短的回答:否。事实上,NUnit旨在使这一点变得不可能。测试基本上不应该知道其论证来自何方或由谁提供。在某些高级测试生成方案以及[Theory]测试中,这一点很重要。

解决此问题的一般方法是采取步骤,以确保测试的名称唯一。任何重复项,无论是在同一列表中还是在两个列表之间,都无法准确确定问题的出处。

关键问题是显然重复测试是否为真实重复。您将不会知道,除非每个返回的参数的Type以允许您确定确切大小写的方式覆盖ToString()。例如,如果Country是一个没有ToString覆盖的类,则测试的每个实例都将被命名为SomeTest(<Country>)之类。 OTOH,如果Countryenum或以独特的方式覆盖其ToString(),这将不是问题。

就您而言,有一种相对简单的方法为测试提供唯一的全名,即使显示名称相同。

  1. 将所有测试放在抽象的基类中。

  2. 从该基座派生两个不同的灯具。

  3. 在其中一个灯具中使用CountryListA,在另一个灯具中使用CountryListB

也就是说,在我看来,更好的方法是保持当前结构并使测试用例更易于识别。