【问题标题】:Is there a way to repeat a nUnit TestFixture multiple times?有没有办法多次重复 nUnit TestFixture?
【发布时间】:2021-03-19 08:12:20
【问题描述】:

有没有办法为列表中的每个项目运行一次 nunit TestFixture?假设我有一个类似以下的设置:

Public Class TestData
{
Public String Parameter1{get;}
Public String Parameter2{get;}
Public String Parameter3{Get;}
}

我想做的是创建一个 TestData 对象列表:

List<TestData> inputs = new List<TestData>(){};

然后使用 nunit 3,针对列表中的每个项目运行一个 TestFixture 和其中包含的所有测试。

【问题讨论】:

    标签: c# unit-testing nunit nunit-3.0


    【解决方案1】:

    TestFixtureAttribute 可以接受参数列表,类似于TestCaseAttribute。提供的值用作测试类构造函数的参数。通常的过程是将构造函数参数保存在成员变量中。例如:

    [TestFixture(123, "John")]
    [TestFixture(456, "Mary")]
    [TestFixture(789, "Fred")]
    public class MyTest
    {
        private int _num;
        private string _name;
    
        public MyTest(int num, string name)
        {
            _num = num;
            _name = name;
        }
    
        ...
    }
    

    fixture 将被创建和执行三次,每组参数一次。您可以在测试中使用保存的值,可以是简单测试或参数化测试。

    [TestCase] 一样,您只能使用 C# 语言允许的类型的常量参数。

    如果您不喜欢这种限制和/或有很多测试用例并希望合并数据,您可以将所有 [TestFixture] 条目替换为单个 [TestFixtureSource],如下所示...

    [TestFixtureSource(nameof(MyTestData))]
    public class MyTest
    {
        private int _num;
        private string _name;
    
        public MyTest(int num, string name)
        {
            _num = num;
            _name = name;
        }
    
        ...
    
        static IEnumerable<TestFixtureData> MyTestData()
        {
            yield return new TestFixtureData(123, "John");
            yield return new TestFixtureData(456, "Mary");
            yield return new TestFixtureData(789, "Fred");
        }
    }
    

    这个属性比[TestCase] 稍微复杂一些,所以一定要阅读documentation。特别是,如果您想在多个夹具类之间共享相同的数据,请查看“表格 2”。

    【讨论】:

    • 感谢@Charlie 的回答。我希望有类似于 [TestCaseSource] 工作方式的东西,在那里我可以为它提供一个包含我的参数的类的对象类型,以及一个生成 IEnumerable 的方法,并且可以为每个对象运行夹具这会产生。如果这是不可能的,并且我想运行一个 Fixture 20-30 次,有没有比在我的班级顶部编写 30 个不同的静态 Fixture 属性声明更好的解决方案?
    • 是的,有。我打算将其添加到我的答案中,但我被其他事情分心并忘记了回来。我马上更新。
    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多