使用值数组进行 NUnit 测试

问题描述 投票:0回答:3

我尝试将 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
}
c# nunit
3个回答
28
投票

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)
{
    ....
}

3
投票

您可以在测试方法上使用

FactoryAttribute
,而不是在参数上使用
ValuesAttribute
。阅读更多相关信息这里

编辑: 亚历山大是对的。 FactoryAttribute 是 API 的临时部分。正确的路径是使用 TestCaseSourceAttribute


0
投票

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
  )
  {
     ....
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.