Nunit: [Order] TestFixtures 上不允许重复,文档缺陷?

创建于 2018-10-09  ·  4评论  ·  资料来源: nunit/nunit

根据文档: 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 的编译器错误

重复的“订单”属性

不过,如果能直观地处理重复项,那就太好了。

所有4条评论

@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# 属性语法的工作原理。 有两个关键点需要注意:

  1. 方括号中的任何属性都适用于代码中可以接受属性的下一个元素。 在这种情况下,它是类。

  2. 方括号中的属性序列,例如 [A, B, C],与单独的括号对中的相同序列具有完全相同的含义,例如 [A] [B] [C]。

作为风格问题,我避免将逗号语法与导致创建多个测试实例的属性一起使用,因为它会导致混淆。

这可以改写为允许 $ TestFixture Order属性/参数,但在我们考虑之前,你能给我们一个用例吗? 通常Order用于按顺序运行集成测试,您可以在测试中按顺序执行较长操作的一部分。 参数化TestFixture通常用于测试具有不同输入数据的相同测试。 我想不出你想以特定顺序执行此操作的场景。

我的用例是逻辑业务回归测试和 TestFixture 上的属性/参数,我无法按照我想要使用 NUnit 的方式进行排序。 与以前相比,这些框架不仅用于单元测试。

作为一种解决方法,您可以切换到TestFixtureSource而不是多个TestFixture属性。 如果只有一个TestFixtureSourceAttribute ,灯具将按照您为它们返回数据的顺序运行。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ericnewton76 picture ericnewton76  ·  3评论

JackUkleja picture JackUkleja  ·  5评论

ChrisMaddock picture ChrisMaddock  ·  3评论

Thaina picture Thaina  ·  5评论

ffMathy picture ffMathy  ·  3评论