# Clean Code - Ch09 單元測試 測試代碼與Production Code同等重要,甚至更重要。測試代碼腐化會導致產品程式接著腐化,引發惡性循環。 ## 1. TDD 3 大法則 訂定目標,用最簡單的方式,專注達成目的,這就是 TDD 的精神。 1. 在寫好一個會報錯的測試代碼前不寫任何 Production Code 用一個失敗的測試來展示出Production Code的問題點 2. 一次只寫一個會報錯的錯誤場景 專注於目前的問題,一次只處理一件事 3. 只寫可以通過當前錯誤的 Production Code 不寫與目前問題無關的代碼,多寫多錯 ## 2. 讓測試程式整潔 測試代碼依然要保持整潔,不然到最後雜亂無章的測試代碼也會被拋棄。沒有測試代碼之後就會出現惡性循環,變成不敢修改 Prodcution Code 導致軟體品質下降。 測試程式與產品程式一樣重要,撰寫時該遵守的規則還是要遵守,不能因為它是測試代碼就不在意變數的命名或排版等等。 ## 3. 測試帶來更多的好處 如果沒有好好的維護測試代碼,長久下來就會變得不敢隨便的動Production Code,因為你不能保證新的改動不會造成問題 ## 4. 整潔的測試 整潔的測試只有一件事要注意,那就是可讀性,測試代碼要寫的乾淨整潔,讓人好懂。 ## 5. 測試代碼的function 當你的測試代碼寫多了之後,你可能會發現有很大一部分會一直重複,這時候你可以幫他建立測試代碼用的function,讓你的測試代碼可以變得簡短而且好閱讀 這種測試代碼的function不會在你剛開始寫測試代碼時就特別設計的,而是經過持續重構你的測試代碼而得出來的 ## 6. 雙重標準 測試程式注重可讀性,可以犧牲效率。 ## 7. 一個測試一次斷言 (Assert) 斷言數量越少越好,你就可以越專注在你正在解決的問題上,而且也符合前面說的TDD的原則 ## 8. 一個測試一個概念 一個測試案例裡面只檢測一件事,專注於目前的問題 ## 9. FIRST 整潔的測試遵循五個法則 1. **Fast:** 快速 測試代碼執行的速度要夠快,因為你一個function通常都至少會寫2、3個測試代碼 這樣會導致你每次執行測試時都會跑很多個function 如果不夠快會導致測試的時間變很久 2. **Independent:** 獨立 每個測試代碼能夠獨立運行,不依賴於其他測試程式 3. **Repeatable:** 可重複性 測試代碼應該要在任何系統環境都能夠執行,減少因環境因素而產生測試失敗的問題 4. **Self-Validating:** 自我驗證 測試程式應該要輸出bool。不管是測試成功或失敗。測試的結果應該可以直接看到而不是透過log之類的去看測試的結果,如果看log時理解成錯誤的意義的話,這樣就會導致你可能會去把正確的測試代碼改成錯的 5. **Timely:** 及時 Production Code要在測試代碼寫完後再寫。如果先寫Production Code再寫測試代碼的話,你可能會覺得測試代碼很難寫,而必須回去先做重構才能寫 ###### tags: `Clean Code` `Book`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up