在SO上不止一次the question has been asked。但是给出的唯一答案是“你不应该订购你的单元测试,这很糟糕,因为”或“你可以避免这种情况......”
我已经知道它很糟糕,为什么它很糟糕,以及避免它的技术。但这不是我想知道的。我想知道是否可以订购NUnit测试的执行,而不是按字母顺序排序。坦率地说:我实际上希望国家从一个测试传播到另一个测试。相信我,我有一个聪明的理由,这违背了通常的理念。
MSTest具有“有序测试”功能,在某些情况下非常有用。我想在NUnit中拥有这种能力。可以吗?
答案 0 :(得分:16)
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() { ... }
}
答案 1 :(得分:9)
解决方法(hack)是按字母顺序排列测试用例名称。见这个主题:
https://bugs.launchpad.net/nunit-3.0/+bug/740539
依赖于字母顺序是一种可以使用的解决方法,但不记录并支持超出显示的可视顺序。理论上它可以随时改变。实际上,在NUnit 3.0之前它不会改变,因此您可以非常安全地将其用作解决方法
这句话来自NUnit的主要开发者Charlie Poole。
他们似乎还有一个计划用于支持NUnit 3中的有序测试,但是他们将如何这样做仍在讨论中。
答案 2 :(得分:5)
只是NUnit 2.5.1的更新。根据文档,有些情况甚至不支持字母顺序。
执行顺序
在NUnit 2.5中,个别测试用例按字母顺序排序 按顺序执行。对于NUnit 2.5.1,个别情况不是 已排序,但按NUnit发现它们的顺序执行。 此顺序不遵循属性的词法顺序 通常会在不同的编译器或不同的版本之间变化 CLR。
因此,当TestCaseAttribute在方法上多次出现时 或者与其他数据提供属性结合使用时 TestCaseAttribute,测试用例的顺序是未定义的。
答案 3 :(得分:2)
尝试使用NameParameters
参数将TestName
传递给您希望的字符串,以便按TestName排序TestCase()。
[TestCase(..., TestName = "1stTest")]
[TestCase(..., TestName = "2ndTest")]
答案 4 :(得分:0)
对于Nuint,您可以使用以下代码。
[TestMethod]
[Priority(2)]