我使用多个TestCaseSource属性。是否有可能确定哪个值来自哪个源?
代码示例:
[TestCaseSource(CountryListA)]
[TestCaseSource(CountryListB)]
public void SomeTest(Country country){
...tests on country...
// access the source (either CountryListA or CountryListB)
}访问源有多种原因,例如,我需要检查该列表中的国家是唯一的,或者如果出了问题,我想记录测试失败的国家。
发布于 2019-11-04 16:22:29
简短回答:不。事实上,NUnit的设计就是为了让这一切变得不可能。测试基本上不应该知道他们的论点从何而来,也不知道是谁提供的。这在某些高级测试生成场景以及[Theory]测试中都很重要。
解决此问题的一般方法是采取步骤,确保您的测试具有唯一的名称。任何重复,无论是在同一列表中还是在两个列表之间,都不可能准确地确定哪个源是问题所在。
关键问题是,显然是重复测试是否是真正的重复测试。除非每个返回参数的类型以允许您确定确切情况的方式覆盖ToString(),否则您不会知道这一点。例如,如果Country是一个没有ToString覆盖的类,那么测试的每个实例都将命名为SomeTest(<Country>)。OTOH,如果Country是一个enum或者它的ToString()是以一种独特的方式被覆盖的话,这不会是一个问题。
在您的示例中,有一种相对简单的方法可以为测试提供唯一的全名,即使显示名称是相同的。
class.
CountryListA,另一个是CountryListB。尽管如此,在我看来,更好的方法是保持当前的结构,并使测试用例更易于识别。
https://stackoverflow.com/questions/58689853
复制相似问题