之前有介紹過 ReportGenerator,支援多種 Code Coverage 測試涵蓋率套件
今天要來介紹 Coverlet,他除了支援 Azure DevOps 的 ReportGenerator 輸出 html,還可以整合 VS IDE 的 Fine Code Coverage,不論是開發還是 CI 自動化都兼顧到了
開發環境
- VS 2019 Enterpirse
- Rider 2021.1.1
- .NET 5
Coverlet 是 .NET 的跨平台代碼覆蓋框架,支援程式碼分支(if else)和方法覆蓋。它適用於 Windows 的 .NET Framework 和 .NET Core
Coverlet 三種整合方式
- VSTest engine integration
- MSBuild task integration
- As a .NET Global tool (supports standalone integration tests)
只支援新版的 .NET Sdk 專案範本
VSTest engine integration
3.0.0 版本之後的收集器,支援
- NET Core >= 2.0
- .NET Framework >= 4.6.1
在測試專案安裝套件
dotnet add package coverlet.collector
Coverlet 整合 Visual Studio Test Platform data collector. 很簡單只要執行以下命令
dotnet test --collect:"XPlat Code Coverage"
它就會開始跑測試,把測試結果放在 coverage.cobertura.xml 檔案
更多進階的用法請參考:coverlet/VSTestIntegration.md at master · coverlet-coverage/coverlet (github.com)
MSBuild Integration
安裝
dotnet add package coverlet.msbuild
使用說明
在 dotnet test 接續參數,多個參數用分號隔開
/p:Exclude=\"[coverlet.*]*,[*]Coverlet.Core*\", /p:Include=\"[coverlet.*]*,[*]Coverlet.Core*\", or /p:CoverletOutputFormat=\"json,opencover\".
CoverletOutputFormat 支援格式:
- json (default)
- lcov
- opencover
- cobertura
- teamcity
CoverletOutput:輸出位置,只需要指定路徑,副檔名會依據 CoverletOutputFormat 參數決定
Coverlet 整合 MsBuild. 很簡單只要執行以下命令,執行測試
dotnet test /p:CollectCoverage=true
在專案的跟目錄產生 coverage.json 涵蓋率報表
更多進階的用法請參考:coverlet/MSBuildIntegration.md at master · coverlet-coverage/coverlet (github.com)
.NET Global Tool
顧名思義就是安裝在本機全域,調用 coverlet 跑測試
安裝
dotnet tool install --global coverlet.console
範例
coverlet /path/to/test-assembly.dll --target "dotnet" --targetargs "test /path/to/test-project --no-build"
更多進階的用法請參考:coverlet/GlobalTool.md at master · coverlet-coverage/coverlet (github.com)
MS Build Integration ReportGenerator
跑完測試涵蓋率之後,還需要視覺化的 UI,這裡我選擇用上篇介紹過的 ReportGenerator 和 MsBuild
dotnet add package ReportGenerator
我想要跑完測試涵蓋率之後(GenerateCoverageResultAfterTest),產生報表,在專案檔加入以下 Target
<Target Name="GenerateHtmlCoverageReport" AfterTargets="GenerateCoverageResultAfterTest">
<ItemGroup>
<CoverageFiles Include="./results/coverage.cobertura.xml" />
</ItemGroup>
<ReportGenerator ReportFiles="@(CoverageFiles)"
ProjectDirectory="$(MSBuildProjectDirectory)"
TargetDirectory="report"
ReportTypes="Html;Badges"
HistoryDirectory="history"
AssemblyFilters="+Lab.DAL;"
VerbosityLevel="Verbose" />
</Target>
執行以下命令
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput="./results/"
產生出來的報表如下所示:
VS 2019 IDE Extensions
VS 2019 擴充工具 Fine Code Coverage 整合 Coverlet,安裝套件後,在 VS 設定找到它,畫面如下:
叫出 Fine Code Coverage 視窗
執行所有測試
在測試專案的輸出資料 bin\net5.0\fine-code-coverage\coverage-tool-output 可以找到最後輸出的內容
這不就是 ReportGenerator 嗎 XDD
通過 Fine Code Coverage 整合讓我們更容易使用涵蓋率報表了,如果你的 VS IDE 沒有測試涵蓋率這是一個不錯的選擇。
自動化整合
I[TFS 2015] 實作 Build vNext 自動部署 dotCover 測試涵蓋率網頁 | 余小章 @ 大內殿堂 - 點部落 (dotblogs.com.tw)
[Unit Test] 測試涵蓋率報表 - ReportGenerator | 余小章 @ 大內殿堂 - 點部落 (dotblogs.com.tw)
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET