12

我正在使用带有 TestCaseSource 属性的 NUnit 对动态数据进行数据驱动测试,方法与NUnit TestCaseSource 将值传递给工厂如何将动态对象传递给 NUnit TestCase 函数的方法相同?

在每种情况下,他们都使用 IEnumerable <TestCaseData> 来指定数据。从这里的 NUnit 文档http://nunit.org/index.php?p=testCaseSource&r=2.5看来,这需要是与 TestCase 相同的类的静态或实例成员。

我想将其重构为另一个类,因为我想使用相同的 TestCaseSource 属性。有谁知道这是否可能?

4

3 回答 3

19

Robert 已经回答了它,但我会尝试使用 C# 的新功能来改进他的回答。

public static class TestCasesData 
{ 
      private static string[] TestStringsData() 
      {
           return new string[] {"TEST1", "TEST2"};
      }
      private static string[] TestIntsData() 
      {
           return new in[] { 1, 2};
      }
}
[TestFixture]
public class MyTest
{
    [Test]
    [TestCaseSource(typeof(TestCasesData ), nameof(TestCasesData .TestStringsData))]
    public void TestCase1(...)
    {
    }

    [Test]
    public void TestCase2(
      [ValueSource(typeof(TestCasesData), "TestIntsData")] int testData,
    )
    {
    }
}
于 2016-08-26T11:26:14.193 回答
9

您可以执行以下操作:

[TestCaseSource(typeof(CommonSource), "GetData")]
public void MyTest(...) {...}

属性构造函数的第一个参数告诉它要查看哪个类,第二个参数告诉它要使用的特定成员名称。

于 2016-05-13T18:38:18.600 回答
3

如果 NUnit 要求 TestCaseSource 与测试在同一个类中,最简单的方法可能是让该方法调用您的常用方法。然后,可以将详细信息保存在其他地方,从而最大限度地减少重复代码。

例如,每个测试类可能具有以下内容:

IEnumerable LocalSource()
{
    return CommonSource.GetData();
}

CommonSource 类将是一个单独的类,用于加载测试所需的数据。

于 2011-06-07T14:34:23.680 回答