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