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 編譯項目的話可以參考以下文章:
