首页 文章

NUnit testcasesource,数据重构为另一个类

提问于
浏览
4

我正在使用带有TestCaseSource属性的NUnit,以与NUnit TestCaseSource pass value to factoryHow to pass dynamic objects into an NUnit TestCase function?相同的方法对动态数据进行数据驱动测试

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

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

3 回答

  • 3

    罗伯特已经回答了,但我会尝试用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,
        )
        {
        }
    }
    
  • 5

    如果NUnit要求TestCaseSource与测试位于同一个类中,最简单的方法可能是让该方法调用您的常用方法 . 然后,细节可以保存在其他地方,因此您可以最小化重复的代码 .

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

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

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

  • 3

    你可以这样做:

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

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

相关问题