2011-06-06 88 views
21

不止一次the question has been asked在SO上。但唯一的答案是给出了“你不应该需要命令你的单元测试,这是坏的,因为”或“你可以避免,如果...”如何订购NUnit测试

我已经知道它是坏的,为什么它是坏的,以及避免它的技术。但那不是我想知道的。我想知道是否可以命令执行NUnit测试,而不是按字母顺序。坦率地说:我实际上希望国家能够从一个测试传播到另一个测试。相信我,我有一个聪明的理由,这违背了平常的哲学。

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

回答

9

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

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

依托字母顺序是一种变通方法,您可以使用,但它是文档和支持超出了显示器的视觉秩序。理论上它可以随时改变。在实践中,它不会改变,直到NUnit 3.0,所以你很安全使用它作为解决方法

这个引用是来自NUnit的主要开发者查理普尔。

看起来他们似乎有一个计划来支持NUnit 3中的有序测试,尽管他们将如何这样做仍在讨论之中。

5

只是NUnit 2.5.1的更新。根据文件,有些情况下,即使是字母顺序也不被支持。

NUnit TestCaseAttribute

执行

的顺序在NUnit的2.5,单独的测试用例按字母顺序排序并 以该顺序执行。使用NUnit 2.5.1,个案不是 排序,而是按照NUnit发现它们的顺序执行。 此命令不遵循属性的词法顺序,并且 将经常在不同编译器或CLR的不同版本 之间变化。

其结果是,当TestCaseAttribute出现多次上的方法 或当其它数据提供属性组合使用与 TestCaseAttribute,的测试用例的顺序是不确定的。

2

尝试使用NameParameters参数与您希望传递一个字符串的TestName,为了TestCase的(),以通过测试名称进行排序。

[TestCase(..., TestName = "1stTest")] 
    [TestCase(..., TestName = "2ndTest")] 
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() { ... } 
} 

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

0

为Nuint你可以用下面的代码。

[TestMethod] 
    [Priority(2)]