2016-10-03 144 views
1

我正在使用NUnit在C#中爲ASP.NET MVC應用程序創建單元測試。單元測試訂單公約?

簡版:我應該按字母順序排列我的測試方法還是按屬於被測試類的方法排序?

比如:說我要測試的類:

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(){} 
    } 

一個簡單的問題,我知道,但我找不到任何對流從我的搜索結果中可以看出,只是很多關於命名測試方法的約定。謝謝你的幫助!

+1

我認爲第一個是正確的路要走..... – Hackerman

+1

我會按照他們正在測試的內容進行分組。例如,關於X方面的所有事情,以及Y方面的類,等等。這就是我想要通過視覺掃描找到特定的測試。使用'#region''#endregion'保持清潔。 – Wurd

+2

不要使用區域,它們是可讀代碼的禍根 –

回答

3

我會盡他們第一種方式。

我也會從測試名稱中刪除Test_,因爲它是多餘的命名。

最好的命名約定我已經看到了命名測試是:

MethodName_ContextOfTest_ResultOfTest

例子:

A_WithNullString_ThrowsException

使得它很容易寫你的測試,以測試特定的事情,並使其他人更容易理解你正在測試的內容。

+0

感謝您的快速響應和命名提示。我會選擇這個作爲接受的答案,因爲某些原因,我必須等5分鐘才能這樣做。 – Reddy

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() { ... } 
}