单元测试订单公约?

时间:2016-10-03 14:29:28

标签: c# asp.net-mvc unit-testing nunit conventions

我正在使用NUnit在C#中为ASP.NET MVC应用程序创建单元测试。

简短版本:我应该按字母顺序排序我的测试方法,还是按照属于被测试类的方法的顺序排序?

For Instance:我想测试课程:

public class MyClass{
     public void B(){}
     public void A(){}
     public void C(){}
}

对我来说,构建我的测试类是否更合适......

[TestFixture]
public class MyClassTests{
         [Test]public void Test_B(){}
         [Test]public void Test_A(){}
         [Test]public void Test_C(){}
    }

或者像这样...

[TestFixture]
public class MyClassTests{
         [Test]public void Test_A(){}
         [Test]public void Test_B(){}
         [Test]public void Test_C(){}
    }

我知道一个简单的问题,但是我从谷歌搜索中找不到任何约定,只是为了命名测试方法的许多惯例。谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

我会以第一种方式做到这一点。

我还会从测试名称中删除Test_,因为它是冗余命名。

我在命名测试中看到的最佳命名约定是:

MethodName_ContextOfTest_ResultOfTest

示例:

A_WithNullString_ThrowsException

使您可以非常轻松地编写测试来测试特定的内容,并使其他人更容易理解您正在测试的内容。

答案 1 :(得分:1)

如果您升级到NUnit 3(或已经在使用它),您可以使用[Order]属性,然后您不必破​​坏您的测试名称。请参阅NUnit Order Attribute的文档。

public class MyFixture
{
    [Test, Order(1)]
    public void TestA() { ... }


    [Test, Order(2)]
    public void TestB() { ... }

    [Test]
    public void TestC() { ... }
}