[Azure Devops] 獲取單元測試的程式碼覆蓋率

1. 獲取程式碼覆蓋率

上一篇文章里,我們在 Pipeline 中插入一個單元測試並把所有單元測試都通過作為 Pipeline 通過的硬性要求。除此以外,我們還可以獲取單元測試的程式碼覆蓋率,用作衡量程式碼品質的指標。程式碼覆蓋率沒有一個標準,各個項目有各個項目的造化,不一定更高的單元測試覆蓋率就代表項目的程式碼品質高。不過通過觀察程式碼覆蓋率的趨勢也可以從另一個角度衡量項目的程式碼品質。

在 Azure Devops 有不同的方式生成程式碼覆蓋率,例如使用 .NET Core CLI 編譯項目的話可以參考這篇文章生成程式碼覆蓋率:

【Azure DevOps系列】Azure DevOps生成程式碼覆蓋率 - HueiFeng - 部落格園

而在前面的文章里我都是使用 Visual Studio Build 編譯並使用 Visual Studio Test 進行單元測試,那麼事情就簡單很多,只需在 VSTest 這個 task 的參數中加上 codeCoverageEnabled: true 即可,修改後的 YAML 如下:

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    codeCoverageEnabled: true

如果是圖形化的 Pipeline 編輯器,則需要在 VSTest 的配置中選中 Code coverage enabled:

之後,在 Pipeline 的運行結果中可以看到程式碼覆蓋率:

切換到 Code Coverage 頁面,點擊 Download code coverage results 可以下載程式碼覆蓋率的詳細結果:

這個程式碼覆蓋率的詳細結果可以在 Visual Studio 中打開查看:

2. 觀察程式碼覆蓋率的趨勢

之前說了,我們應該關心程式碼覆蓋率的趨勢。Azure Devops 也提供了這種擴展。做左邊菜單選中 Overview -> Dashboard,導航到項目的儀錶板,點擊 Edit 按鈕進入編輯模式,然後點擊右下角的 Extension Gallery 進入 marketplace。

搜索並進入 Code Coverage Protector 頁面,點擊 Get it free 按鈕。

選中我們的組織並安裝:

回到儀錶板頁面並刷新,進入編輯模式,找到 Code Coverage,點擊 Add 按鈕:

Size 選擇一個 4 X 3,然後在 Build definition 選項選中用於單元測試的 Pipeline,點擊 Save:

重複一次上面的操作,這次 Size 選擇 1 X 1 添加一個只有一格大小的圖表。最終結果如下,左邊的打的圖表顯示程式碼覆蓋率的趨勢,右邊小的圖表顯示當前程式碼覆蓋率:

可以看到這個項目最近幾次提交的程式碼覆蓋率明顯下降了,說明這幾次提交都沒做好單元測試。

3. 最後

關於Visual Studio 測試的更多內容,可以參考以下文檔:

Visual Studio 測試任務 - Azure Pipelines Microsoft Docs

Visual Studio 生成和發布任務 - Azure Pipelines Microsoft Docs

如使用 .NET Core CLI 編譯項目的話可以參考以下文章:

【Azure DevOps系列】Azure DevOps生成程式碼覆蓋率 - HueiFeng - 部落格園