C# 在NUnit TestFixture构造函数中使用值和范围属性
我有多种测试方法,可以测试多个参数的所有可能组合。我可以在如下方法上使用NUnit ValueAttribute或RangeAttribute:C# 在NUnit TestFixture构造函数中使用值和范围属性,c#,nunit,parameterized-unit-test,nunit-2.6,C#,Nunit,Parameterized Unit Test,Nunit 2.6,我有多种测试方法,可以测试多个参数的所有可能组合。我可以在如下方法上使用NUnit ValueAttribute或RangeAttribute: [TestFixture] public class MyExampleTests { [Test] public void TestedEntity_GivenParemeter_Passes( [Values(1, 2)] int inputA, [Range(1, 4)] int inputB)
[TestFixture]
public class MyExampleTests
{
[Test]
public void TestedEntity_GivenParemeter_Passes(
[Values(1, 2)] int inputA,
[Range(1, 4)] int inputB)
{
if (inputA > 0 && inputB > 0)
Assert.Pass();
}
}
然而,在我的现实世界中,有4个参数、12个方法和更多的值,因此写出每个方法的所有值变得很乏味,如果我想进行更改,我可能会在某个地方出错
如何将所有值组合的测试生成从单个方法转移到TestFixture主体中?以下内容不起作用,但这正是我想要的:
[TestFixture]
public class MyExampleTests2
{
readonly int inputA;
readonly int inputB;
public MyExampleTests2(
[Values(1, 2)] int inputA,
[Range(1, 4)] int inputB)
{
this.inputA = inputA;
this.inputB = inputB;
}
[Test]
public void TestedEntity_GivenParemeter_Passes()
{
if (this.inputA > 0 && this.inputB > 0)
Assert.Pass();
}
}
我已经知道TestFixtureAttribute可以接受参数,但它们不能按我想要的方式工作。我只能给每个参数一个硬编码的值。相反,我想使用范围,并让NUnit为每个组合创建一个测试。另外,我希望该解决方案能够在NUnit 2.6.4中使用。您可以使用
ValuesSource
:
[Test]
public void TestedEntity_GivenParemeter_Passes(
[ValueSource(nameof(FirstSource))] int inputA,
[ValueSource(nameof(SecondSource))] int inputB)
{
if (inputA > 0 && inputB > 0)
Assert.Pass();
}
private static readonly int[] FirstSource = { 1, 2 };
private static readonly IEnumerable<int> SecondSource = Enumerable.Range(1, 4);
[测试]
公共无效测试通过(
[ValueSource(nameof(FirstSource))]int输入,
[ValueSource(nameof(SecondSource))]int-inputB)
{
如果(输入大于0&&inputB>0)
Assert.Pass();
}
私有静态只读int[]FirstSource={1,2};
私有静态只读IEnumerable SecondSource=Enumerable.Range(1,4);
如果要避免重复参数声明,可以创建包含InputA
和InputB
属性的单一类型,以及返回该类型序列的源