PIT 突變測試
PIT 突變測試
PIT 突變測試
PIT 突變測試
一般單元測試看的是「程式碼有沒有被測試跑到」,PIT 看的是「程式碼寫錯時,測試抓不抓得到」。
原理
一般單元測試:拿正確的程式執行一次,確認結果符合預期,覆蓋率工具(JaCoCo)再記錄哪些行被執行過。
PIT(突變測試):自動把程式改壞,每次只改一處,叫做一個 mutant。
例如把 > 改成 >=、+ 改成 -、return x 改成 return null、刪掉某個方法呼叫。然後把相關的測試全部跑一次:- 測試失敗,表示這個 mutant 被抓到了(killed),代表測試有效。
- 測試仍然通過,表示這個 mutant 存活了(survived),代表那一行雖然有被執行,但沒有任何斷言在檢查它。
例子
java
if (amount > limit) throw …;
- 如果測試只用 amount = 1000、limit = 10 去測「超過要丟例外」,JaCoCo 會顯示這一行和兩個分支都測到了。
- 但 PIT 把 > 改成 >= 之後,這個測試照樣通過,這個 mutant 就會存活。它告訴你:amount == limit 這個邊界值沒人測過。