C# 單元測試 (3) 程式碼涵蓋度

July 11, 2025

用 Visual Studio 2022 (下稱 VS 2022) 的話,有幾種方法可以產生程式碼涵蓋度的報告,檢查單元測試的涵蓋範圍和比例。一是從延伸模組安裝 Fine Code Coverage (下稱 FCC,Github 官方說明),在 Visual Studio 內顯示報告。FCC 支援 MsTest, NUnit and xUnit 等測試框架;二是使用 NuGet 安裝 dotnet-coveragereport-generator 產生網頁報告。

安裝和使用 FCC

在 VS 2022 內,開啟「管理延伸模組」的視窗,輸入 Fine Code Coverage 安裝,安裝後須重新啟動 VS 2022。

除了從延伸模組安裝,也能從 Visual Studio Marketplace 下載檔案安裝 (VS 2022 和 VS 2019 須分別下載):Fine Code Coverage - Visual Studio Marketplace

安裝前建議將 VS 2022 更新到最新版本,避免在延伸模組內找不到 FCC,或安裝失敗的狀況。可參考:I cannot install Fine Code Coverage on Visual Studio 2022 Professional · Issue #513 · FortuneN/FineCodeCoverage

使用方式如下:

  1. 開啟檢視>其它視窗> Fine Code Coverage (FCC)。
  2. 在 Visual Studio 內先執行一次測試。
  3. 接著 FCC 的視窗就會顯示程式碼覆蓋率。

可參考 單元測試 - 10工具介紹(查看涵蓋率、複雜度) - Sian為什麼程式需要單元測試? - 視覺化篇:叡揚部落格

安裝和使用 dotnet-coverage 和 report-generator

開啟終端機,並輸入以下指令:

dotnet tool install -g dotnet-coverage
dotnet tool install -g dotnet-reportgenerator-globaltool

將這兩個套件安裝在全域環境。接著產生 XML 格式的文字報告:

dotnet-coverage collect -f xml -o coverage.xml dotnet test <solution/project>

然後可以產生網頁報告,assemblyfilters 一定要有 +  號或 -  號,以篩選涵蓋度報告的範圍:

reportgenerator -reports:coverage.xml -targetdir:.\report -assemblyfilters:+Service.dll

接著開啟 report\index.html 就能檢視報告。

(以上說明翻譯自 StackOverflow 的回答:How to get Code Coverage from Unit Tests in Visual Studio 2022 Community Edition? - Stack Overflow,並部分改寫)