您是否可以将数据传递到测试夹具,就像将数据传递给测试用例一样?

时间:2016-06-28 14:48:29

标签: nunit

您是否可以将数据传递到NUnit3测试夹具,就像将数据传递给测试用例一样? 这样做甚至有意义吗? (根据参数运行套件(夹具类))

1 个答案:

答案 0 :(得分:6)

绝对!

如果需要传入的参数数量有限,可以将它们放在普通的[TestFixture]属性中,然后将它们传递给TestFixture的构造函数。 e.g。

[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;
    }

此版本将使用两组不同的参数运行测试夹具两次。 (Docs

如果您有更多参数,您可能希望查看[TestFixtureSource] - 它的工作方式大致相同,但允许您以静态方法计算参数,而不是在属性中指定的明确性。 (Docs)像这样的东西:

[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类检索它。