我尝试将 NUnit 与 value 属性一起使用,以便我可以指定许多不同的输入,而无需进行 100 个单独的测试。
但是现在我意识到有时我想使用相同的输入集,但在非常不同的测试中,如下所示。
有没有一种方法可以让我在一个地方指定所有值(例如数组)并为每个值属性使用该数组?
我想确保测试作为 100 个单独的测试运行,而不是 1 个运行 100 个值的测试。
我查看了 Nunit 文档,但找不到实现此目的的方法。有任何想法吗?
代码:
[Test]
public void Test1([Values("Value1", "Value2", "Value3", ... "Value100")] string value)
{
//Run Test here
}
[Test]
public void Test2([Values("Value1", "Value2", "Value3", ... "Value100")] string value)
{
//Run Test here
}
[Test]
public void Test3([Values("Value1", "Value2", "Value3", ... "Value100")] string value)
{
//Run Test here
}
TestCaseSource
属性适合这里。
参见示例:
private string[] commonCases = { "Val1", "Val2", "Val3" };
[Test]
[TestCaseSource(nameof(commonCases))]
public void Test1(string value)
{
....
}
[Test]
[TestCaseSource(nameof(commonCases))]
public void Test12(string value)
{
....
}
您可以在测试方法上使用
FactoryAttribute
,而不是在参数上使用 ValuesAttribute
。阅读更多相关信息这里。
编辑: 亚历山大是对的。 FactoryAttribute 是 API 的临时部分。正确的路径是使用 TestCaseSourceAttribute。
ValueSource
也是一个选项,特别是如果您想组合地提供多个测试参数的值。例如:
public class Tests {
public static string[] firstValues = { "Val1", "Val2", "Val3" };
public static string[] secondValues = { "Val4", "Val5", "Val6" };
[Test, Combinatorial]
public void Test(
[ValueSource(typeof(Test), "firstValues")] firstValue,
[ValueSource(typeof(Test), "secondValues")] secondValue
)
{
....
}
}