NUnit testcasesource将数据重构到另一个类中

NUnit testcasesource将数据重构到另一个类中,nunit,testcasesource,Nunit,Testcasesource,我使用带有TestCaseSource属性的NUnit以与和相同的方法对动态数据进行数据驱动测试 在每种情况下,它们都使用IEnumerable来指定数据。从NUnit文档中可以看出,它需要是与TestCase相同类的静态或实例成员 我想把它重构成另一个类,因为我想使用相同的TestCaseSource属性。有人知道这是否可能吗 如果NUnit要求TestCaseSource与测试在同一个类中,最简单的方法可能是让该方法调用您的公共方法。然后,详细信息可以保存在其他地方,这样可以最大限度地减少

我使用带有TestCaseSource属性的NUnit以与和相同的方法对动态数据进行数据驱动测试

在每种情况下,它们都使用IEnumerable来指定数据。从NUnit文档中可以看出,它需要是与TestCase相同类的静态或实例成员


我想把它重构成另一个类,因为我想使用相同的TestCaseSource属性。有人知道这是否可能吗

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

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

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

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

您可以执行以下操作:

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

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

Robert已经回答了这个问题,但我将尝试用C#的新特性改进他的答案

公共静态类TestCasesData
{ 
私有静态字符串[]TestStringsData()
{
返回新字符串[]{“TEST1”,“TEST2”};
}
私有静态字符串[]TestIntsData()
{
在[]{1,2}中返回新的;
}
}
[测试夹具]
公共类MyTest
{
[测试]
[TestCaseSource(typeof(TestCasesData)、nameof(TestCasesData.TestStringsData))]
公共无效测试用例1(…)
{
}
[测试]
公开无效测试案例2(
[ValueSource(typeof(TestCasesData),“TestIntsData”)]int testData,
)
{
}
}

+1使用
nameof
比使用魔法字符串更好。若类名或方法名发生更改,编译器将在此处对其进行红色标记。