我最近想出了以下約定命名我的測試中,他們班和含有以項目最大限度地發揮其descriptivenes:
比方說,我測試了設置類的項目在MyApp的。系列化命名空間。
首先我將用MyApp.Serialization.Tests命名空間創建一個測試項目。
在這個項目中,當然還有命名空間,我將創建一個名爲的類,如果設置爲(保存爲IfSettings.cs)。
假設我正在測試SaveStrings()方法。 - >我會命名測試CanSaveStrings()。
當我運行這個測試,它會顯示以下標題:
MyApp.Serialization.Tests.IfSettings.CanSaveStrings
我認爲這告訴我很好,它是什麼測試。
當然,英語中的名詞「測試」與動詞「測試」相同是有用的。
您在命名測試時的創意沒有限制,因此我們可以爲他們獲取完整的句子標題。
通常,測試名稱必須以動詞開頭。
實例包括:
- 檢測(例如DetectsInvalidUserInput)
- 拋出(例如ThrowsOnNotFound)
- 威爾(例如WillCloseTheDatabaseAfterTheTransaction)
等
另一種選擇是使用「that」而不是「if」。
後者節省了我,雖然按鍵和描述更準確地我在做什麼,因爲我不知道,是測試的行爲是存在的,但正在測試如果它。
[編輯]
使用上述命名約定現在更長一點後,我發現,那如果前綴可能會造成混淆,具有界面時。恰好如此,測試類IfSerializer.cs看起來與「打開文件選項卡」中的界面ISerializer.cs非常相似。 在測試,正在測試的類和它的接口之間來回切換時,這會變得非常煩人。因此,我現在會選擇那超過如果作爲前綴。
另外我現在用的 - 只有在我的測試類的方法,因爲它不被認爲是最好的做法在其他地方 - 在「_」爲在我的測試方法的名字分開的話:
- [測試] public void detected_invalid_User_Input()*
我覺得這樣比較容易閱讀。
[結束編輯]
我希望這滋生了一些更多的想法,因爲我認爲非常重要的命名測試,因爲它可以爲您節省大量的時間,否則將已花費試圖瞭解是什麼測試正在進行(例如,在延長斷層之後恢復項目之後)。
請參閱:http://stackoverflow.com/questions/96297/naming-conventions-for-unit-tests – 2008-09-30 22:48:25