在NUnit中,TestFixtureSource特性只能用于具有无参数构造函数的类。如果您的测试类具有多个参数构造函数,可以使用TestCaseSource特性来解决这个问题。
下面是一个示例,展示了如何使用TestCaseSource特性来创建带有多个参数构造函数的测试类:
using NUnit.Framework;
using System.Collections;
public class TestData
{
public static IEnumerable TestCases
{
get
{
yield return new TestCaseData(10, 5).Returns(15);
yield return new TestCaseData(20, 7).Returns(27);
yield return new TestCaseData(30, 10).Returns(40);
}
}
}
public class MathHelper
{
private int _a;
private int _b;
public MathHelper(int a, int b)
{
_a = a;
_b = b;
}
public int Add()
{
return _a + _b;
}
}
[TestFixture]
public class MathHelperTests
{
[TestCaseSource(typeof(TestData), nameof(TestData.TestCases))]
public int Add_ShouldReturnSum(int a, int b)
{
MathHelper mathHelper = new MathHelper(a, b);
return mathHelper.Add();
}
}
在上面的示例中,我们创建了一个名为TestData的静态类,其中包含一个名为TestCases的属性。TestCases属性返回一个IEnumerable,其中包含各种测试案例。每个测试案例都是一个TestCaseData对象,使用Return方法指定预期的返回值。
在MathHelperTests类中,我们使用TestCaseSource特性来指定TestData类中的TestCases属性作为测试数据源。然后,在Add_ShouldReturnSum方法中,我们使用提供的参数创建MathHelper对象,并使用Add方法计算并返回结果。
这样,您就可以使用TestCaseSource特性来创建带有多个参数构造函数的NUnit测试类,而不是使用TestFixtureSource特性。