我認為它的本質是:
分離關注點,一次只戴一頂帽子
在我們編程的過程中,有幾個關注點:需求,實現,設計。
TDD 給了我們明確的三個步驟,每個步驟關注一個方面。
紅:寫一個失敗的測試,它是對一個小需求的描述,只需要關心輸入輸出,這個時候根本不用關心如何實現。
綠:專注在用最快的方式實現當前這個小需求,不用關心其他需求,也不要管代碼的質量多么慘不忍睹。
重構:既不用思考需求,也沒有實現的壓力,只需要找出代碼中的壞味道,并用一個手法消除它,讓代碼變成整潔的代碼。
注意力控制
人的注意力既可以主動控制,也會被被動吸引。注意力來回切換的話,就會消耗更多精力,思考也會不那么完整。
使用 TDD 開發,我們要主動去控制注意力,寫測試的時候,發現一個類沒有定義,IDE 提示編譯錯誤,這時候你如果去創建這個類,你的注意力就不在需求上了,已經切換到了實現上,我們應該專注地寫完這個測試,思考它是否表達了需求,確定無誤后再開始去消除編譯錯誤。
不會合理拆分任務
TDD 之前要拆分任務,把一個大需求拆成多個小需求。
也可以拆出多個函數來。
不會寫測試
什么是有效的單元測試,有很多人寫測試,連到底在測什么都不清楚,也可能連斷言都沒有,通過控制臺輸出,肉眼對比來驗證。
好的單元測試應該符合幾條原則:
原文轉自:http://www.jianshu.com/p/62f16cd4fef3