如何订购NUnit测试

Bre*_*ias 22 nunit

不止一次这个问题.但是给出的唯一答案是"你不应该订购你的单元测试,这是坏的,因为"或"你可以避免这种情况......"

我已经知道它很糟糕,为什么它很糟糕,以及避免它的技术.但这不是我想知道的.我想知道是否可以订购NUnit测试的执行,而不是按字母顺序排序.直言不讳:我实际上希望国家从一个测试传播到另一个测试.相信我,我有一个聪明的理由,这违背了通常的哲学.

MSTest具有"有序测试"功能,在某些情况下非常有用.我想在NUnit中拥有这种能力.可以吗?

sca*_*r80 17

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() { ... }
}
Run Code Online (Sandbox Code Playgroud)

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


Mer*_*ham 9

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

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

依赖于字母顺序是一种可以使用的解决方法,但除了显示的可视顺序之外,它没有记录和支持.理论上它可以随时改变.实际上它在NUnit 3.0之前不会改变,所以你使用它作为一种解决方法是非常安全的

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

看起来他们还有一个方案来支持NUnit 3中的有序测试,但他们将如何这样做仍在讨论中.


小智 5

只是NUnit 2.5.1的更新.根据文档,有些情况甚至不支持字母顺序.

NUnit TestCaseAttribute

执行顺序

在NUnit 2.5中,各个测试用例按字母顺序排序并按此顺序执行.使用NUnit 2.5.1时,各个案例不会被排序,而是按照NUnit发现它们的顺序执行.此顺序不遵循属性的词法顺序,并且通常会在不同的编译器或CLR的不同版本之间变化.

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