Please enable JavaScript.
Coggle requires JavaScript to display documents.
單元測試的藝術 (核心技術 (虛設常式解決依賴問題 (重構 (實作接縫(Seam) P.65, 測試保護, 解除依賴兩種重構: A型:Class …
單元測試的藝術
核心技術
虛設常式解決依賴問題
重構
實作接縫(Seam) P.65
測試保護
解除依賴兩種重構:
A型:Class -> 抽象化 Interface
B型:將介面的
偽實作
(Fake),注入目標物件
擷取介面
依賴注入
IoC 容器
https://github.com/JS-Zheng/blog/blob/master/03.%20IoC-DI/ServiceContainer.java
Fake 模擬異常
簡介
外部依賴:檔案系統、執行緒、記憶體、時間
Stub:取代外部相依的物件
Get/set 注入假物件
好讀、好寫
擷取與覆寫 (Extract and Override)
模擬物件驗證互動
互動測試:一個物件如何對其他物件發送訊息的測試(測試有三種:回傳值、狀態、呼叫相依的第三方物件)
差異:Mock & Stub (圖 P.96)
Stub:不會導致測試失敗,因針對測試類別驗證
範例:Mock
重用:驗證功能禁止寫在模擬物件裡面(寫在Test)
可讀性、維護性:無法在測試程式看到具體的驗證動作,對測試程式隱藏關鍵資訊。
同時使用 Mock & Stub
不會對 Stub 進行驗證 (P.102)
建立期望物件
One Mock per Test
過度指定(overspecification):過度的指定在測試中,應該要發生的行為
假物件鍊:Stub -> Mock or Stubs
問題:手刻 Mock & Stub
花時間、多寫樣板、多驗證、多實作
使用隔離框架
動態產生假物件(fake)
模擬回傳值
測試事件
檢查監聽物件,是否 發生具體反應
優缺點
優:容易驗證參數、容易驗證一個方法被多次呼叫、容易建立假物件
應避免:測試程式可讀性變差、驗證錯誤的東西、一個測試有多個Mock、過度指定
了解隔離框架
受限、不受限
價值
可用性
反模式
可測試性設計 & 流程
導入 unit test
舊程式碼
可測試性設計
入門
Unit Test 基礎
定義
小到一個方法,大到多個類別
特質
自動化、永久存在、容易使用、結果一致、隔離(獨立於其他測試)
整合測試
相對於整合測試,單元測試應該斷開(unplugged)所有資源(網路、資料庫)
TDD
核心:撰寫優秀測試、撰寫產品之前撰寫測試、良好的測試設計
撰寫失敗的測試、撰寫符合測試的程式碼、重構
第一個 unit test
框架
容易實現、自動化重複執行、提高覆蓋率
撰寫
3A: Arrange, Act, Assert
使用參數重構
可將多個參數清單,傳入 Test Case
測試系統狀態,非回傳值
使用工廠方法初始化
測試程式碼架構
測試階層和組織
單元測試的支柱
可信任
可維護
可讀性