Day 01 立下這個系列貫穿全篇的主題句:不可控依賴不代表不能測,關鍵是找到每種依賴各自的替身策略。走完第四部七天,是時候把這句話兌現成一張具體的對照表。
| 不可控依賴 | 替身策略 | 對應章節 |
|---|---|---|
| 網路 | 手刻符合介面的 mock response,依請求分派假資料 | Day 23 |
| 檔案系統 | 用 pyfakefs 讓標準函式庫的呼叫作用在記憶體裡的假檔案系統 |
Day 24 |
| 加密 | 反向產生已知答案的加密 fixture,驗證解密結果是否正確還原 | Day 25 |
表面上這三種策略用的技巧完全不同(手刻類別、第三方函式庫、反向產生資料),但拆解到底層,其實都在回答同一個問題:「這個依賴對外承諾的行為邊界是什麼?替身只要精確符合這個邊界,被測試的程式碼就分辨不出來自己面對的是真的還是假的。」
get()、read()、headers)open()、os.path)Day 28 講過「mock 太底層會讓測試脆弱」,本質上就是在提醒:替身要包在這條邊界上,不能包到邊界背後的實作細節。
如果之後遇到這三種以外的不可控依賴(例如系統時間、隨機數、第三方支付閘道),同樣的判斷邏輯依然適用:先找出這個依賴對外承諾的穩定邊界,再想辦法在那條邊界上做出一個行為精確吻合的替身,而不是各自發明一套處理方式,或者乾脆放棄測試、只能靠人工檢查。
pyfakefs、反向產生 fixture 三種替身策略明天是系列總結:這套紀律,换成任何語言、任何專案都通用嗎?