每當我們為專案寫測試的時候,其實就是拿另一個程式來執行我們寫的程式,看看是不是能將程式碼裡所有可能的路徑都「走」過一遍,確保不會有意料外的錯誤發生。而這個所有路徑被走過的比例,就是所謂的覆蓋率(Code Coverage)。市面上的測試框架都支援在跑完測試後,一併產生覆蓋率報告,而身為開發者的我們,就可以用這個報告了解目前程式碼庫的健康狀態。
在 IntelliJ IDEA 裡產生覆蓋率報告
IntelliJ IDEA 在執行測試及產生覆蓋率報告等方面已經非常成熟,支援市面上絕大多數的測試工具,而各測試框架通常也有推出對應的 Plugin 供安裝。因此,在 IntelliJ IDEA 裡取得覆蓋率報告只需要一個按鍵。
首先打開
ShoppingCartTest
測試類別,您會看到左邊的編輯器側邊欄上依據不同的測試範圍,有數個綠色播放鍵可以點選。我們先選最大範圍,也就是 class ShoppingCartTest 這一行左邊的綠色播放鍵。點下去後會出現下拉式選單,第一個是我們在寫測試時已經用過的 Run、第三個 Run 'ShoppingCartTest' with Coverage 就可以在跑完測試後同時產生覆蓋率報告。
查看覆蓋率報告
IntelliJ IDEA 在產生完覆蓋率報告後,會自動在右邊開啟 Coverage 面板,裡面會依照 Package 的結構顯示各層級的檔案。依照路徑逐一點選到
ShoppingCart
類別,我們會看到面板上會依照 Class、Method、Line 3 種維度顯示覆蓋率。我們在之前的練習過程中,針對 3 個方法
add()
、
totalPrice()
、
count()
都有寫對應的測試,所以目前該類別的覆蓋率是 100%。
點開
ShoppingCart
類別,您也會發現 IntelliJ IDEA 也會很貼心的在編輯器側邊欄行號的旁邊以「綠色」的色帶標示該行是否有被覆蓋(若該行只有符號沒有邏輯的話就會被忽略);若是打開
main.kt
則會看到行號上有「紅色」的色帶表示有東西沒被測試到。用這種顏色區分的方式標示測試覆蓋率,可謂一目了然。
註:色帶的顏色跟您使用的 IDE 佈景主題有關,筆者示範時使用的是
Cyan Light
。若您的佈景主題與我不同,那看到的顏色也會有差異。
除了可以從 Coverage 面板看測試覆蓋率報告外,只要覆蓋率報告產生出來後再打開 Project 面板,就可以看到在
src/main/kotlin
結構下的資料夾名稱旁邊,都會以灰色的字樣標記每個 Package 目前的覆蓋率數值,提供我們另一種瀏覽覆蓋率報告的方式。
今天我們在 IntelliJ IDEA 裡,學習怎麼在執行測試的時候產生覆蓋率報告,從數據面來了解程式碼庫的現況。並以
ShoppingCart
類別及
main.kt
檔案為例,實際看到有覆蓋及沒有覆蓋在 IntelliJ IDEA 是怎麼被標示的,希望對大家了解測試覆蓋率有幫助。
文章的最後還是要提醒一下,覆蓋率的數字只是一個指標。我們雖然可以利用這個數值來推測程式碼庫的健康狀態,但一味的追求覆蓋率並沒有意義,確實設立哪些地方該寫測試、維持合理覆蓋率,才是將團隊資源用在刀口上的作法。
明天我們會再跳回 TeamCity 那端,看看怎麼在 TeamCity 上產生跟 IntelliJ IDEA 一樣的測試覆蓋率報告。
Code coverage