本篇將介紹如何透過 Coverlet + ReportGenerator 產生 .NET Core 的測試報告;
並用 Dockerfile 產生測試報告的 Docker Image,以網頁的形式查看程式碼覆蓋率。
Coverlet
dotnet cli 提供的 dotnet test
指令,並沒有支援測試覆蓋率,可透過第三方套件分析程式碼覆蓋率。
Coverlet 是一套支援 .NET Core 且跨平台的程式碼覆蓋率分析工具。
可透過 dotnet cli 的 dotnet tool
安裝,指令如下:
1 | dotnet tool install --global coverlet.console |
除了安裝 dotnet tool
外,測試專案也需要安裝 NuGet 套件 coverlet.msbuild
,安裝指令:
1 | dotnet add package coverlet.msbuild |
安裝完成後,就可透過 dotnet test
指令,附帶參數執行程式碼覆蓋率分析:
1 | dotnet test /p:CollectCoverage=true \ |
- CollectCoverage
使否啟用程式碼覆蓋率分析。
(預設為 false) - CoverletOutputFormat
程式碼覆蓋率分析報告的格式。
支援的格式有:json
、lcov
、opencover
、cobertura
、teamcity
。
(預設為 json 格式) - CoverletOutput
分析報告的輸出路徑。
上例會在測試專案目錄下的coverage
資料夾產生coverage.opencover.xml
檔案。
(預設為測試專案目錄)
dotnet test
程式碼覆蓋率分析完成會輸出如下畫面:
ReportGenerator
上面步驟透過 Coverlet 產生的 coverage.opencover.xml
檔案並不適合閱讀,所以透過 ReportGenerator 這套工具,把 opencover 格式的測試報告轉換成 HTML,再透過瀏覽器打開,呈現圖形化介面報告。
ReportGenerator 支援多種測試報告格式轉換,官方資料:
輸入格式 | 輸出格式 |
---|---|
|
|
安裝方式一樣可透過 dotnet cli 的 dotnet tool
安裝,指令如下:
1 | dotnet tool install --global dotnet-reportgenerator-globaltool |
安裝完成後,就可透過 reportgenerator
指令,將測試報告格式轉換:
1 | reportgenerator \ |
- reports
要被轉換的測試報告來源檔案路徑。 - reporttypes
轉換輸出的格式。
(預設為 Html) - targetdir
轉換輸出的位置。
轉換完成就會生成一大堆的 HTML 檔案。如下:
用瀏覽器開啟
index.htm
就可以看到圖形化的測試報告進入點。
Dockerfile
build-unit-test.dockerfile
1 | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS dotnet-test-env |
Docker Image 建置指令:
1 | docker build -f build-unit-test.dockerfile -t my-project-coverage . |
以上 Dockerfile
共分為兩個階段:
- 第一階段產生名稱為 dotnet-test-env 的暫存 Container
- 安裝
Coverlet
及ReportGenerator
- 把程式碼複製到 Container
- 執行程式碼覆蓋率分析
- 將測試報告轉換為 HTML 格式
- 安裝
- 第二階段把 dotnet-test-env 的 /coverage 目錄內檔案,複製到 nginx 預設目錄內,打包成最終階段的 Docker Image。
建置完成後,就可以用 docker run
把測試報告的 Docker Image 執行起來了。
指令:
1 | docker run -p 8080:80 my-project-coverage |
用瀏覽器開啟 http://localhost:8080/ 就可以看到圖形化的測試報告了。