DD是指在編寫真正的功能實現代碼之前先寫測試代碼,然后根據需要重構實現代碼。在JUnit的作者Kent Beck的大作《測試驅動開發:實戰與模式解析》(Test-Driven Development: by Example)一書中有這么一段內容:“消除恐懼和不確定性是編寫測試驅動代碼的重要原因”。因為編寫代碼時的恐懼會讓你小心試探,讓你回避溝通,讓你羞於得到反饋,讓你變得焦躁不安,而TDD是消除恐懼、讓Java開發者更加自信更加樂於溝通的重要手段。TDD會帶來的好處可能不會馬上呈現,但是你在某個時候一定會發現,這些好處包括:
- 更清晰的代碼 — 只寫需要的代碼
- 更好的設計
- 更出色的靈活性 — 鼓勵程序員面向接口編程
- 更快速的反饋 — 不會到系統上線時才知道bug的存在
補充:敏捷軟件開發的概念已經有很多年了,而且也部分的改變了軟件開發這個行業,TDD也是敏捷開發所倡導的。
TDD可以在多個層級上應用,包括單元測試(測試一個類中的代碼)、集成測試(測試類之間的交互)、系統測試(測試運行的系統)和系統集成測試(測試運行的系統包括使用的第三方組件)。TDD的實施步驟是:紅(失敗測試)- 綠(通過測試) – 重構。
在使用TDD開發時,經常會遇到需要被測對象需要依賴其他子系統的情況,但是你希望將測試代碼跟依賴項隔離,以保證測試代碼僅僅針對當前被測對象或方法展開,這時候你需要的是測試替身。測試替身可以分為四類:
- 虛設替身:只傳遞但是不會使用到的對象,一般用於填充方法的參數列表
- 存根替身:總是返回相同的預設響應,其中可能包括一些虛設狀態
- 偽裝替身:可以取代真實版本的可用版本(比真實版本還是會差很多)
- 模擬替身:可以表示一系列期望值的對象,並且可以提供預設響應
Java世界中實現模擬替身的第三方工具非常多,包括EasyMock、Mockito、jMock等。
