testing

4 posts

我把測試、程式碼和散文都放在一個 Markdown 檔案裡,再也不用往文件裡複製程式碼了

Literate programming 將 Markdown 檔案作為單一事實來源,使文件、測試和實作保持同步。以下是如何用三十行 Python 實現它。

你的文件、測試和程式碼是三份檔案,講著同一個故事,卻講得都很糟糕。 你在原始碼裡更新了函式簽名,忘了改 README 裡的範例。一週後,新進員工把過時的程式碼片段複製到了生產環境。你的測試檔案仍然把舊的行為編碼為預期結果。現在你有兩個 bug 和一個文件工單。…

乾等 race condition 是最爛的測試策略

model checking 如何在數秒內碾壓你在生產環境跑幾天才能發現 concurrency bug 的做法,以及如何把它用在自己的程式碼上。

在生產環境裡等 race condition 冒出來,那不叫測試。那叫披著勤奮外衣的僥倖。 你可以把應用跑上幾週,盯著 metrics dashboard,最後照樣發布一個 concurrency bug——它只會在兩個 request 剛好打進同一個 cache eviction window…

單元測試全綠,資料卻憑空消失

模擬資料庫測試只能驗證 SQL 語法,無法確認資料列是否能撐過當機、並發寫入或 schema 不符。以下是真的測試資料持久化的方法。

如果你在測試中使用模擬資料庫,你其實只是在驗證 repository 層是否呼叫了正確的方法。你並沒有測試資料能否在當機後存活、唯一約束是否真的阻止重複資料,或者transaction 失敗時是否會回滾。 這個差別很重要。模擬的 只會回傳你預設的結果。真正的…

不用淹沒在 mock action 裡也能測試 Redux

把每個 Redux action 都 mock 掉,只會讓你的測試變成變更日誌驗證器。以下介紹如何改用真實的狀態轉換來測試你的 store。

如果你曾經寫過一個測試,去驗證 是否被以完全正確的 payload 形狀呼叫,那你其實寫了一個「只要有人重新命名常數就會壞掉」的測試。 這不是測試你的狀態邏輯。這是在測試你的手指有沒有打對字串。 Redux 測試教學通常從 Jest mock 開始:監聽 ,斷言 action creator 被呼叫了,斷言 type…