Mutation Test With Java Pitest

寫了 Unit Test 然後呢 一般來說談到要讓程式碼的品質變好,多數人想到的除了規範團隊的 Coding Style 、Code Review 之外,就屬撰寫 Unit test 來確保 production code 可以確實符合商業需求。 但是這邊就有一個問題產生了,究竟我要寫多少單元測試才夠呢?我的覆蓋率已經 100% 了,是否代表萬無一失了?但 100% 根本神話,而且這樣要寫超多單元測試,寫測試的時間都可以拿來做下一個需求了。。。 上述的問題在尚未引入 Mutation test 之前看起來是真的挺無解,也容易陷入覆蓋率的迷思之中。 Mutation Test 是什麼 Mutation test 說實話不是個新概念,他的歷史應該可以往回推到 1978 年的這篇論文。他的基本概念就是藉由改變 production code 來檢驗你的單元測試能否抓到這些改變,若能夠抓到就代表你的測試能夠確保目前的程式碼夠強健,能夠確保在商業邏輯改變後你可以知道什麼東西會跟以前不同。反之,若改變 production code 後單元測試卻沒有反應出來,就代表需要再補強單元測試。 會用到的必要 Packages junit official site org.pitest official site junit 目前第五版也是可以使用 PIT,不過作法比較不同,需要引用不同的 Packages,可以參考這個來試試。 Demo Code source code:github repo 範例程式 以下這個是一個迴文函式,目的是用來判斷一個傳入的字串是否屬於迴文。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Palindrome { public boolean isPalindrome(String inputString) { if (inputString.length() == 0) { return true; } else { char firstChar = inputString.charAt(0); char lastChar = inputString.charAt(inputString.length() - 1); String mid = ""; if (inputString.length() > 1){ mid = inputString.substring(1, inputString.length() - 1); } return (firstChar == lastChar) && isPalindrome(mid); } } } 以下則是這個函式的測試程式 ...

August 17, 2019 · 2 分鐘 · 394 字