我最近繼承了不同人在不同時間編寫的應用程序,並尋找關於如何標準化的指導。命名單元和集成測試方法的最佳做法是什麼?
回答
假設NUnit的:
[Test]
public void ObjectUnderTest_StateChanged_Consequence()
{
Assert.That(tra_la_la);
}
[Test]
public void ObjectUnderTest_Behaviour_Consequence()
{
Assert.That(tra_la_la);
}
例如:
[Test]
public void WifeIsTired_TakeWifeToDinner_WifeIsGrateful()
{
Assert.That(tra_la_la);
}
[Test]
public void WifeIsTired_MentionNewGirlfriend_WifeGetsHalf()
{
Assert.That(tra_la_la);
}
在這種情況下我可能會發現,使用最多和重構代碼的其餘部分使用的命名約定。如果最常用的是真的很可怕,我仍然會看現有的代碼,並試圖找到一個可以與之共存的代碼。一致性比任意慣例更重要。
它不是一個隨意的習慣,而是一種最佳做法。 – HDave 2010-05-19 04:30:38
我使用FunctionTestCondition
構造。如果我有兩個方法,Get
和Set
我也許會創建以下測試方法:
GetTest
是一個積極的測試(一切正常)。GetTestInvalidIndex
測試傳遞給方法的無效索引。GetTestNotInitialized
用於測試數據在使用前未被檢測的時間。SetTest
SetTestInvalidIndex
SetTestTooLargeValue
SetTestTooLongString
它的啓發看看BDD(行爲驅動開發)和this blog post尤其如此。
BDD本質上集中在組件上,他們應該做什麼。因此,它會直接影響您如何命名/構建測試,以及它們用於設置條件和驗證的代碼。 BDD不僅允許開發人員讀/寫測試,而且團隊中的非技術成員(業務分析師等)可以通過指定測試和驗證測試來做出貢獻。
非常有趣的鏈接 - 謝謝。 – HDave 2010-05-19 04:29:37
我只寫了它的用途。這不像是你必須在其他地方輸入名字,所以有testWibbleDoesNotThrowAnExceptionIfPassedAFrobulator
不是一個問題。任何測試都是以「測試」開始的,顯然。
沒有標準正因爲如此,不同的人/地方都會有不同的方案。重要的是你堅持爲標準。
個人,我的下面的風扇 - 在C#示例代碼,但非常接近的Java,適用同樣的規則:
[Test]
public void person_should_say_hello()
{
// Arrange
var person = new Person();
// Act
string result = person.SayHello();
// Assert
Assert(..., "The person did not say hello correctly!");
}
明確
該測試的名稱應該有的名稱被測試的類別。在這個例子中,被測試的類是Person
。測試名稱還應具有正在測試的方法的名稱。這樣,如果測試失敗了,你至少知道在哪裏尋找解決方法。我還建議遵循AAA - Arrange, Act, Assert規則,這將確保您的測試易於閱讀和遵循。
場所的失敗消息
當涉及到斷言結果/狀態,其有用的是包括一個可選的消息。這使得測試失敗時更容易,特別是作爲構建過程的一部分運行或通過外部工具運行時。
下劃線
最後的(雖然是可選的)立場,我所遵循的是使用測試名稱中使用下劃線。雖然我並不喜歡生產代碼中的下劃線,但它們在測試名稱中的使用非常有用,因爲測試名稱通常要長得多。快速瀏覽一個使用下劃線的測試名稱,證明其可讀性更高,儘管這是主觀的,並且是單元測試實踐中爭論的焦點。
集成測試
同樣的標準適用於集成測試,唯一的區別是這樣的測試應是從單元測試分開的位置。在上面的示例代碼中,測試類將被稱爲PersonTests
,並位於名爲PersonTests.cs
的文件中。集成測試將以類似的方式命名 - PersonIntegrationTests
,位於PersonIntegrationTests.cs
。同一個項目可以用於這些測試,但確保它們位於不同的目錄中。
- 1. 單元測試/集成測試GXT代碼的最佳方法是什麼?
- 2. 單元測試異步方法的最佳方法是什麼?
- 3. 在.NET中單元測試私有方法的最佳做法是什麼?
- 4. 最佳做法/集成測試
- 5. Android單元測試的最佳做法?
- 6. 單元測試的最佳做法IHttpModule
- 7. 什麼是單元測試構造函數的最佳方法?
- 8. 單元測試使用ServerSocket類的方法的最佳方法是什麼?
- 9. 構建單元測試程序集的最佳方法是什麼?
- 10. 集成測試數據庫驅動的php的最佳做法是什麼?
- 11. 測試命令行工具的最佳方法是什麼?
- 12. 使用水豚調試rspec集成測試的最佳方法是什麼?
- 13. 單元測試數據生成的最佳做法
- 14. 在插入單元測試後清理數據的最佳做法是什麼
- 15. 命名屬性是對象的最佳做法是什麼?
- 16. 單元測試一個簡單的JsonResult的最佳方法是什麼?
- 17. 最佳做法是什麼?
- 18. 命名存檔對象的最佳做法是什麼?
- 19. Nginx和runit ....什麼是最佳做法
- 20. 測試JSON數據的最佳做法是什麼?
- 21. hadoop基準測試的最佳做法是什麼?
- 22. 測試中的最佳做法是什麼?
- 23. 單元測試方法有斷言而非異常時的最佳做法是什麼?
- 24. 在單元測試中驗證Set值的最佳方法是什麼?
- 25. 在node.js中編寫單元測試的最佳方法是什麼?
- 26. 在單元測試中檢查矩陣值的最佳方法是什麼?
- 27. 爲iPhone/iPad編寫單元測試的最佳方法是什麼?
- 28. Rails5 - 編寫服務單元測試的最佳方法是什麼?
- 29. 什麼是別名和方法名稱的最佳方式
- 30. 測試方法內部方法的最佳方法是什麼? (JUnit)
另一種方法是MethodUnderTest_Scenario_Expectation。例如AddItem_EmptyCart_OneItemInCart()。這假定每個測試類的測試夾具類。 – Ryan 2010-05-18 23:50:18
@Ryan - 你的建議是我最終使用的。這也是該書「單元測試的藝術」的推薦。 – HDave 2010-07-07 02:50:07