2008-09-21 66 views

回答

27

一個測試,每個實例:

@Test 
public void userCannotVoteDownWhenScoreIsLessThanOneHundred() { 
... 
} 

都只有一個斷言和使用好名字測試失敗時給了我一個更好的報告。他們向我尖叫:「你打破了這個規則!」。

+0

這基本上是BDD,簡而言之 - 雖然BDD把重點放在寫這些規則作爲描述性斷言。 – 2008-09-21 07:19:53

2

每個檢查的測試用例。它更細化。它使得查看特定測試用例失敗的情況變得更加容易。

4

BDD(行爲驅動開發)

雖然我還在學習,它基本上TDD組織/重點圍繞如何你的軟件實際使用...這將不是如何開發/內置。

Wikipedia General Info

每個測試方法我會建議您嘗試左右逢源BTW至於是否做多的斷言。有時你會看到一種策略將你留在一個綁定中,並且開始有意義爲什麼你通常使用每個方法只使用一個斷言。

1

我會建議每個檢查的測試用例。 你保持原子越多,結果就越好!

在單個測試中保留多個檢查將幫助您生成需要更正多少功能的報告。

保持原子測試案例會告訴你整體質量!

0

每個檢查一個測試用例。如果您適當地命名該方法,則可以在這些測試之一導致迴歸失敗時爲問題提供有價值的提示。

4

我有一個測試能力功能提供。然而,每個測試可能有幾個斷言。 測試用例的名稱表示正在測試的功能。

一般來說,對於一個功能,我有幾個「晴天」測試和一個或幾個「下雨天」的情況,這取決於它的複雜性。

2

我爲每個方法編寫至少一個測試,並且如果方法需要一些不同的setUp來測試好的情況和不好的情況,那麼這個時間就會多一些。

但你應該從不在一個單元測試中測試多個方法。它會減少工作量和錯誤修復您的測試,以防API更改。每張支票和超級描述性的名稱

1

在每張支票一般一個測試用例。當測試按特定函數分組時,它會使重構(例如移除或分割)功能變得更加困難,因爲測試還需要進行大量更改。針對你想要從課堂中學到的每種行爲類型編寫測試要好得多。有時候在測試特定的行爲時,每個測試用例都有多個檢查是有意義的。然而,隨着考試變得越來越複雜,班級中的某些內容發生變化時,這些考試變得更加困難。

1

在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*/); 
} 

不知道是否有更聰明的方式來做到這一點,告訴你真相......

1

我喜歡每張支票測試的方法,並有meaningfull名測試方法。例如:

testAddUser_shouldThrowIllegalArgumentExceptionWhenUserIsNull

2

我認爲單斷言的規則是有點過於嚴格。在我的單元測試中,我嘗試遵循單個斷言規則 - 您可以在一個測試方法中使用多個斷言,只要您一個接一個地執行檢查(您不會更改狀態在斷言之間被測試的類)。

因此,在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) 

當然,在長時間使用的斷言組中,我喜歡創建自定義斷言方法 - 這些對比較複雜對象特別有用。

相關問題