【问题标题】:How to Order NUnit Tests如何订购 NUnit 测试
【发布时间】:2011-06-06 05:24:03
【问题描述】:

在 SO 上不止一次 the question has been asked。但是给出的唯一答案是“您不应该订购单元测试,这很糟糕,因为”或“如果...,您可以避免这种情况”

我已经知道它不好,为什么不好,以及避免它的技巧。但这不是我想知道的。我想知道是否可以订购 NUnit 测试的执行,而不是按字母顺序。坦率地说:我实际上希望状态从一个测试传播到下一个测试。相信我,我有一个聪明的理由,这违背了通常的哲学。

MSTest 具有“有序测试”功能,这在某些情况下非常有用。我想在 NUnit 中拥有这种能力。能做到吗?

【问题讨论】:

    标签: nunit


    【解决方案1】:

    NUnit 3.2.0 更新 - 现在支持 OrderAttribute

    OrderAttribute 可以放置在测试方法上,以指定测试运行的顺序。 例子:

    public class MyFixture
    {
        [Test, Order(1)]
        public void TestA() { ... }
    
    
        [Test, Order(2)]
        public void TestB() { ... }
    
        [Test]
        public void TestC() { ... }
    }
    

    https://github.com/nunit/docs/wiki/Order-Attribute

    【讨论】:

    • 这不会影响测试浏览器窗口中的顺序吗?
    • 老问题,但我要补充一点,如果测试在不同的类中,顺序将不正确。如果你想在不同的类中组织测试以避免长类,你可以使用部分类功能。
    【解决方案2】:

    解决方法(hack)是按字母顺序排列测试用例名称。看到这个帖子:

    https://bugs.launchpad.net/nunit-3.0/+bug/740539

    依赖字母顺序是一种您可以使用的解决方法,但它没有记录在案并且支持超出了显示的视觉顺序。理论上它可以随时改变。实际上它在 NUnit 3.0 之前不会改变,所以使用它作为解决方法是非常安全的

    这句话来自 NUnit 的主要开发者 Charlie Poole。

    他们似乎也有一个计划来支持 NUnit 3 中的有序测试,尽管他们将如何做到这一点仍在讨论中。

    【讨论】:

      【解决方案3】:

      只是 NUnit 2.5.1 的更新。根据文档,有时甚至不支持字母顺序。

      NUnit TestCaseAttribute

      执行顺序

      在 NUnit 2.5 中,单个测试用例按字母顺序排序,并且 按该顺序执行。在 NUnit 2.5.1 中,个别情况不是 已排序,但按照 NUnit 发现它们的顺序执行。 此顺序不遵循属性的词法顺序,并且 通常会在不同的编译器或不同版本的 CLR。

      因此,当 TestCaseAttribute 在一个方法上出现多次时 或者当其他提供数据的属性与 TestCaseAttribute,测试用例的顺序未定义。

      【讨论】:

        【解决方案4】:

        尝试使用NameParameters 参数将TestName 与您希望的字符串一起传递,以便按TestName 对TestCase() 进行排序。

            [TestCase(..., TestName = "1stTest")]
            [TestCase(..., TestName = "2ndTest")]
        

        【讨论】:

          【解决方案5】:

          对于 Nuint,您可以使用以下代码。

          [TestMethod]
              [Priority(2)]
          

          【讨论】:

            猜你喜欢
            • 2019-01-20
            • 1970-01-01
            • 2020-04-20
            • 2014-09-17
            • 2018-07-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-25
            相关资源
            最近更新 更多