我如何命令执行 NUnit 测试装置?

How do I order execution of NUnit test fixtures?

我有一个 NUnit 测试项目,它有两个 [TextFixture]s。

我希望其中一个在另一个之前 运行,因为它处理文件创建。他们目前 运行 顺序错误。

考虑到我无法更改 [Test] 或将它们组合成单个单元测试,有没有办法可以控制测试夹具 运行ning 顺序?

我试过 [Order(int num)] 属性,也试过创建一个新的播放列表。

它们都不起作用。

C#、.NET 框架、NUnit 测试框架,Windows。

[OrderAttribute] 的文档指出固定装置的排序 适用于包含的命名空间

确保你的装置在同一个命名空间内,并且你已经在测试装置级别应用了[OrderAttribute]

namespace SameNamespace {
    [TestFixture, Order(1)]
    public class MyFirstFixture
    {
        /* ... */ }
    }

    [TestFixture, Order(2)]
    public class MySecondFixture
    {
        /* ... */ }
    }
}

此外,重要的是要记住虽然 MyFirstFixture 将 运行 在 MySecondFixture 之前,但内部测试的顺序是 local 到测试夹具。

MySecondFixture[Order(1)] 的测试将 运行 MyFirstFixture 中的所有测试完成后。


重要说明:文档也不保证顺序。

Tests do not wait for prior tests to finish. If multiple threads are in use, a test may be started while some earlier tests are still being run.


无论如何,测试都应遵循 Robert C. Martin 在他的“整洁代码”一书中介绍的 F.I.R.S.T 测试原则。

在F.I.R.ST。代表 isolated,这意味着测试不应该相互依赖并且每个测试都应该负责正确执行所需的设置。

如果他们正在测试一件事,请尽力最终将测试合并为一个,或者以测试 1 正在测试的代码段可以测试的方式重写您的逻辑 isolated 来自测试 2 正在测试的代码段。

这也会产生遵守 SRP.

的更简洁代码的副作用

双赢。