根据文档: https ://github.com/nunit/docs/wiki/Order-Attribute
OrderAttribute 可以放置在测试方法或夹具上,以指定测试运行的顺序。
我没有看到以两种不同的方式尊重此文档。
考虑以下 TextFixture 案例
[TestFixture("A", false)]
[TestFixture("B", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
这让我觉得这更像是一个文档/理解缺陷而不是任何东西,但是链接文档声明“_or fixture_”的方式对我来说意味着我可以写
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
实际上,这是 1、2 和 3 的编译器错误
重复的“订单”属性
不过,如果能直观地处理重复项,那就太好了。
@Aarskin如果对单个问题的讨论保留在单个 gitHub 问题中,它对我们(NUnit 开发人员)和用户都有帮助。
您在此处描述的变体与 #3055 上的变体基本相同。 也就是说,这...
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
就像你写的一样...
[TestFixture("A", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
[TestFixture("B", false)]
[Order(3)]
[Order(2)]
[Order(1)]
[Order(0)]
以及您关心使用的八个属性的任何其他顺序。 四个TestFixture
属性都放在同一个类上,导致 NUnit 实例化该类四次。 四个Order
属性也放在同一个类上,导致冲突,因为一个测试可能只有一个顺序。
这是 __not__ NUnit 的限制。 这就是 C# 属性语法的工作原理。 有两个关键点需要注意:
方括号中的任何属性都适用于代码中可以接受属性的下一个元素。 在这种情况下,它是类。
方括号中的属性序列,例如 [A, B, C],与单独的括号对中的相同序列具有完全相同的含义,例如 [A] [B] [C]。
作为风格问题,我避免将逗号语法与导致创建多个测试实例的属性一起使用,因为它会导致混淆。
这可以改写为允许 $ TestFixture
Order
属性/参数,但在我们考虑之前,你能给我们一个用例吗? 通常Order
用于按顺序运行集成测试,您可以在测试中按顺序执行较长操作的一部分。 参数化TestFixture
通常用于测试具有不同输入数据的相同测试。 我想不出你想以特定顺序执行此操作的场景。
我的用例是逻辑业务回归测试和 TestFixture 上的属性/参数,我无法按照我想要使用 NUnit 的方式进行排序。 与以前相比,这些框架不仅用于单元测试。
作为一种解决方法,您可以切换到TestFixtureSource
而不是多个TestFixture
属性。 如果只有一个TestFixtureSourceAttribute
,灯具将按照您为它们返回数据的顺序运行。