2011-06-13 72 views
5

所以說我做TDD和我寫這樣一個測試:TDD測試結構問題

public void testDeposit() 
{ 
    Bank b = new Bank(); 
    b.deposit(100); 
    AssertEquals(100, b.balance); 
} 

那我走了,使測試通過,移動到下一個。說我連續幾次這樣做,並獲得存款,提款和攤銷都工作。

然後說我想寫一個測試,測試某人創建一個帳戶,並做一切的組合。這不是技術上的集成測試,而不是單元測試?如果是,這是否適合TDD,或者TDD是否應該只包含單元測試。

主要是我問,因爲如果這個測試中斷了,最有可能其中一個測試應該中斷,如果他們不這樣做,我可能只是沒有測試適當的場景。那麼當涉及到TDD時,我應該在與單元測試相同的域中進行集成測試,還是應該將這些測試寫入別的其他類/文件並分別運行?

+0

皮膚的另一種方式是...... TDD =>單元測試=>一次一個對象的行爲。 ATDD =>場景測試=>一次一個用戶場景。 – Gishu 2011-06-14 05:12:25

回答

4

我認爲高水平的測試當然可以作爲TDD工作流程的一部分。例如,測試「outside in」可能是定義新功能的一種非常有效的方法。從新功能的一些UI級別驗收測試開始,爲需要提供該功能的組件編寫集成測試,並編寫單元測試以推動每個組件的實現。

我認爲你應該清楚你的測試類型之間的區別,而不是將它們混合在一起,但將它們全部作爲你的TDD過程的一部分是合理的。

+0

然而,這樣做很有意義,但是,您是否會採取將它們保留在同一個測試文件中的方法,並將它們按區域分隔(以.net形式)或者是否爲單元創建單獨的文件夾(甚至是項目) /整合/ UI測試? – slandau 2011-06-13 20:55:53

+0

我更喜歡測試或規範目錄的rails規範,其中包含每種類型測試的子目錄,而每個類別的測試又包含每個類或測試方面的文件。例如。 'specs/models/foo'或'tests/integration/bar'。 – Jonah 2011-06-13 21:02:14

+0

有道理。謝啦。 – slandau 2011-06-13 21:05:22

2

集成測試和單元測試之間的界限可能有點模糊;在進行TDD時,測試「升級」到集成級別是值得的,只是爲了得到功能的確認,但在TDD期間進行「全面的」集成測試(注意全面的引用)肯定是過分的。

基本上,「判斷呼叫」有一個重要方面在進行;您的經驗應該是一個很好的指導,以便在TDD模式下停止添加測試的適當級別。

+0

所以基本上就是這樣,我在這裏測試了一個足夠廣泛的場景,讓我們稍後進一步討論,並着重於在TDD sorta事物中添加更多功能? – slandau 2011-06-13 20:41:16

+0

@slandau:是的,就是這樣;關鍵是不要陷入TDD過程中過分嚴格測試的細節之中;請記住,這是一個首要的發展過程。請記住,沒有代碼,即使是TDD代碼,也沒有缺陷;這是代碼質量和生產力之間的平衡。 – 2011-06-13 20:57:04