###### tags: `CleanCode` <STYLE> p,li,oi,h3{ font-family:"微軟正黑體"; } </STYLE> # 單元測試 * 應該要測試在所有邊界條件中,程式是否能正確運作。 #### 測試驅動軟體開發(Test Driven Development, TDD) TDD的三大法則: 在任何時候保持正常運作。 :::success * 撰寫一個測試失敗的單元測試前,不可撰寫任何產品程式。 * 只撰寫剛好無法通過的單元測試(不能編譯也算無法通過) * 只撰寫剛好能通過當前測試失敗的產品程式 ::: # #### 單元測試 * 使程式保持擴充彈性、可維護性,以及可再利用性。 * 測試程式與產品程式一樣,需要具有**可讀性**(闡明性、簡明性、言簡意賅的表達力) *測試程式持續重構的過程中,可以演化成測試API(建立一連串韓式與功用程式,間接使用被程式設計師用來操縱系統的API)* * 一個測試一個概念,在每個測試函式中只測試一個概念。 * 在每個概念中,盡量最小化斷言(assert)敘述的數量(判斷A是否......)。 # #### 整潔的測試,須遵守F.I.R.S.T.法則 * Fast(快速) 測試必須執行速度快 * Independent(獨立) 測試程式不該相互依賴。必須能按照自己想要的順序進行測試 * Repeatable(可重複性) 可以在任何環境下重複執行。 * Self-Validating(自我驗證) 測試程式應該輸出布林值,不管測試通過或失敗。用以分辨測試程式是否通過。 * Timely(及時) 撰寫測試程式要及時。要恰好在使其通過的產品程式**之前不久**被撰寫。因為若在撰寫產品程式後撰寫測試程式,可能會發現難以被測試。 例: ![](https://i.imgur.com/cn0tfCU.png) ![](https://i.imgur.com/eTWKDAs.png) ---