您可以像将数据传递给测试用例一样将数据传递给NUnit3测试装置吗?这样做有意义吗?
绝对!
如果需要传入的参数数量有限,您可以将这些参数放在普通的[TestFixture]
属性中,它们将被传递给TestFixture的构造函数。例如
[TestFixture("hello", "hello", "goodbye")]
[TestFixture("zip", "zip", "zap")]
public class ParameterizedTestFixture
{
private string eq1;
private string eq2;
private string neq;
public ParameterizedTestFixture(string eq1, string eq2, string neq)
{
this.eq1 = eq1;
this.eq2 = eq2;
this.neq = neq;
}
}
这个版本将使用两组不同的参数运行测试夹具两次。(文档)
如果您有更多的参数,您可能希望查看[TestFixtureSource]
-它的工作方式大致相同,但允许您在静态方法中计算参数,而不是在属性中显式指定。(文档)像这样:
[TestFixtureSource(typeof(FixtureArgs))]
public class MyTestClass
{
public MyTestClass(string word, int num) { ... }
...
}
class FixtureArgs: IEnumerable
{
public IEnumerator GetEnumerator()
{
yield return new object[] { "Question", 1 };
yield return new object[] { "Answer", 42 };
}
}
最后,如果您需要在运行时传入参数,这也可以通过--params
命令行选项,这是NUnit v3.4中的新功能。它看起来还没有被记录下来,但是您可以将它以--params:X=5;Y=7"
格式传递到NUnit控制台命令行。然后可以通过TestContext.Parameters
类检索它。