單元測試
被你測試程式所測試的對象,稱為被測試的系統-System Under Test,SUT
優秀單元測試的特質
優秀的單元測試的特質
- 它應該是自動化,可重複執行
- 很容易被實現
- 有存在的意義
- 按個按鈕可執行它
- 執行速度快
- 執行結果一致(過程中沒改任何東西,多次結果應該是一致)
- 完全掌握被測試的單元
- 完全是被隔離的,執行時獨立於其他測試
- 執行結果是失敗的,應該可以呈現出期望為何,發生原因在哪
檢視自己的單元測試,(軟體測試與單元測試混唯唯一談,可以問以下幾個問題)
- 兩週前所寫的單元測試今天還能正常執行,並得到結果?幾個月前或是幾年前寫的呢?
- 兩個月前所寫的單元測試,Team任何一人可否正常執行它們得到結果嗎?
- 幾分鐘以內跑完所有的單元測試?
- 一鍵跑完所有寫過的單元測試?
- 幾分鐘以內可否寫出一個單元測試?
上述其一個不能,就不是單元測試…
整合測試:是一個工作單元進行測試,這個測是被測試單元並沒有完全控制,而是使用該單元一個或多個真實的依賴物件,EX:時間、網路、資料庫...
EX:一個測試無法控制系統時間,在程式中用DateTimeNow,那麼每次測試執行所取得都是不同時間,測試不容易不穩定。
整合測試還可能帶來一個問題:一次測試的東西太多。
優秀的單元測試如下:
- 一個單元測試是一段可以自動化的程式碼
- 這段程式碼會呼叫被測試的工作單元,之後對這個單元單一最終結果的某些假設或是期望進行驗證
- 單元測試幾乎都是使用單元測試框架進行撰寫的
- 撰寫單元測試容易的執行速度快速,可靠、易讀、容易維護
- 產品代碼不發生變化,單元測試執行結果是穩定一致的
元哥的筆記