您是否爲每個函數/方法編寫一個測試,在測試中使用多個檢查,還是爲每個檢查測試?每個函數/方法應該寫多少個單元測試?
回答
一個測試,每個實例:
@Test
public void userCannotVoteDownWhenScoreIsLessThanOneHundred() {
...
}
都只有一個斷言和使用好名字測試失敗時給了我一個更好的報告。他們向我尖叫:「你打破了這個規則!」。
每個檢查的測試用例。它更細化。它使得查看特定測試用例失敗的情況變得更加容易。
BDD(行爲驅動開發)
雖然我還在學習,它基本上TDD組織/重點圍繞如何你的軟件實際使用...這將不是如何開發/內置。
每個測試方法我會建議您嘗試左右逢源BTW至於是否做多的斷言。有時你會看到一種策略將你留在一個綁定中,並且開始有意義爲什麼你通常使用每個方法只使用一個斷言。
我會建議每個檢查的測試用例。 你保持原子越多,結果就越好!
在單個測試中保留多個檢查將幫助您生成需要更正多少功能的報告。
保持原子測試案例會告訴你整體質量!
每個檢查一個測試用例。如果您適當地命名該方法,則可以在這些測試之一導致迴歸失敗時爲問題提供有價值的提示。
我有一個測試能力功能提供。然而,每個測試可能有幾個斷言。 測試用例的名稱表示正在測試的功能。
一般來說,對於一個功能,我有幾個「晴天」測試和一個或幾個「下雨天」的情況,這取決於它的複雜性。
我爲每個方法編寫至少一個測試,並且如果方法需要一些不同的setUp來測試好的情況和不好的情況,那麼這個時間就會多一些。
但你應該從不在一個單元測試中測試多個方法。它會減少工作量和錯誤修復您的測試,以防API更改。每張支票和超級描述性的名稱
我試圖分離出數據庫測試和業務邏輯測試(使用其他人推薦的BDD),首先運行數據庫測試,確保數據庫處於良好狀態,然後讓您的應用程序使用它。
有一個很好的podcast show with Andy Leonard on what it involves and how to do it,如果你想要更多的信息,我寫了一個blog post on the subject(無恥插頭; O)
在每張支票一般一個測試用例。當測試按特定函數分組時,它會使重構(例如移除或分割)功能變得更加困難,因爲測試還需要進行大量更改。針對你想要從課堂中學到的每種行爲類型編寫測試要好得多。有時候在測試特定的行爲時,每個測試用例都有多個檢查是有意義的。然而,隨着考試變得越來越複雜,班級中的某些內容發生變化時,這些考試變得更加困難。
在Java/Eclipse/JUnit中,我在同一棵樹上使用了兩個源目錄(src和test)。 如果我有一個的src/COM/myCompany的/不管/ TestMePlease與價值的測試方法(例如deleteAll(名單<?>東西)拋出MyException)我創建了一個測試/ COM/myCompany的/不管/ TestMePleaseTest與方法來測試不同的使用情況/場景:
@Test
public void deleteAllWithNullInput() { ... }
@Test(expect="MyException.class") // not sure about actual syntax here :-P
public void deleteAllWithEmptyInput() { ... }
@Test
public void deleteAllWithSingleLineInput() { ... }
@Test
public void deleteAllWithMultipleLinesInput() { ... }
有不同的檢查更容易處理我。儘管如此,因爲每個測試都應該是一致的,如果我希望我的初始數據集保持不變,例如,我有時會創建東西並在相同的檢查中將其刪除,以確保其他每個測試都能找到原始數據集:
@Test
public void insertAndDelete() {
assertTrue(/*stuff does not exist yet*/);
createStuff();
assertTrue(/*stuff does exist now*/);
deleteStuff();
assertTrue(/*stuff does not exist anymore*/);
}
不知道是否有更聰明的方式來做到這一點,告訴你真相......
我喜歡每張支票測試的方法,並有meaningfull名測試方法。例如:
testAddUser_shouldThrowIllegalArgumentExceptionWhenUserIsNull
我認爲單斷言的規則是有點過於嚴格。在我的單元測試中,我嘗試遵循單個斷言規則 - 您可以在一個測試方法中使用多個斷言,只要您一個接一個地執行檢查(您不會更改狀態在斷言之間被測試的類)。
因此,在Python,我相信這樣的測試是正確:
def testGetCountReturnsCountAndEnd(self):
count, endReached = self.handler.getCount()
self.assertEqual(count, 0)
self.assertTrue(endReached)
,但這個應該是分裂成兩種測試方法:
def testGetCountReturnsOneAfterPut(self):
self.assertEqual(self.handler.getCount(), 0)
self.handler.put('foo')
self.assertEqual(self.handler.getCount(), 1)
當然,在長時間使用的斷言組中,我喜歡創建自定義斷言方法 - 這些對比較複雜對象特別有用。
- 1. 每種方法應該運行多少種測試方法?
- 2. 我應該爲每個功能編寫多少個集成測試(或場景)?
- 3. 我應該單元測試多個(不同)輸入值到一個函數嗎?
- 4. 我應該爲以下哪種方法編寫單元測試?
- 5. QUnit:每個方法有多個斷言或每個方法多個測試的一個測試?
- 6. 單個單元測試應該有多廣泛?
- 7. 我應該單元測試我的代碼多少錢
- 8. Python單元測試:使用不同的輸入測試單個函數的多個測試函數?
- 9. 單元測試應該有多徹底?
- 10. 單元測試應該走多遠?
- 11. 單個或多個單元測試項目每個解決方案?
- 12. 一個方法應該拋出一個例外的單元測試?
- 13. 單元測試應該知道它正在測試的功能多少?
- 14. 我應該寫集成測試還是單元測試?
- 15. 單元測試 - 我應該拆分測試還是進行單個測試?
- 16. 單元測試一個函數php
- 17. 我應該寫多少個try&catch塊?
- 18. 我應該斷言在給定方法的每個單元測試中調用依賴方法嗎?
- 19. 我該如何做這個方法的單元測試?
- 20. 我該如何寫我的流星方法的單元測試?
- 21. 我應該應用多少個測試來加倍鏈接列表測試?
- 22. django單元測試多個數據庫
- 23. 測試一個函數:還有什麼應該測試?
- 24. Python的單元測試:該測試方法
- 25. 我應該爲每個斷言創建一個新的測試方法嗎?
- 26. 打印結果每個單元測試
- 27. 我應該訪問單元測試的受保護方法嗎?
- 28. 我應該單元測試一種主要方法嗎?
- 29. PySpark單元測試方法
- 30. python單元測試方法
這基本上是BDD,簡而言之 - 雖然BDD把重點放在寫這些規則作爲描述性斷言。 – 2008-09-21 07:19:53