.NET Code Coverage

閱讀時間約 5 分鐘

Code Coverage 是什麼?

程式碼覆蓋率(Code Coverage)是一種軟體測試指標,用百分比表示,數值越高越好。

  1. 100% 的意思是「整個程式碼在測試中都被執行到」。
  2. 80% 的意思是「有80%的程式碼在測試中被執行到,還有20%的程式碼沒有被測試覆蓋」。
  3. 20% 的意思是「只有20%的程式碼在測試中被執行到,有80%的程式碼沒有經過測試」。

常見 Unit Test 在 80% 認定為達到基本標準;90% 算是良好。不過這沒有標準,不同公司都有不同的作法,有的公司甚至完全不寫測試。達到 100% 的覆蓋率需要耗費相當多的時間,就看技術人員評估這樣做是不是值得。

我認為用 SonarQube 的 Clean as You Code 的方式改善程式碼覆蓋率,會是比較務實的作法。也就是每次修改、新增的程式碼都通過 SonarQube 的檢查。之前的程式碼就暫時不管,但是隨著不斷的修改程式,如果有碰到之前的程式,就順便修改,加上相關的測試程式,通過 SonarQube 的檢查。專案的程式就會逐漸改善,程式碼覆蓋率會逐漸的提升。

Coverlet

GitHub 有 Coverlet 專案,此專案可建立 Code Coverage 報告。

https://github.com/coverlet-coverage/coverlet

Coverlet 有以下使用方式(多選一):

  1. VSTest engine integration - 當 Visual Studio Test Platform 執行時,找到 Coverlet Data Collector,然後由 Coverlet 負責建立 Code Coverage 報告。(功能比較少)
  2. MSBuild task integration - 整合到 MSBuild 上,也就整合到 dotnet build 的流程上。
  3. As a .NET Global tool (supports standalone integration tests) - 一個 Binary 執行檔,根據測試專案的 Assembly 建立 Code Coverage 報告。

Usage

VSTest engine integration

安裝以下 package:

dotnet add package coverlet.collector

產生 Code Coverage 報告:

dotnet test --collect:"XPlat Code Coverage"

報告會出現在類似以下的目錄(TestResults\{GUID}\coverage.cobertura.xml):

C:\\git\\coverlet\\Documentation\\Examples\\VSTest\\HelloWorld\\XUnitTestProject1\\TestResults\\bc5e983b-d7a8-4f17-8c0a-8a8831a4a891\\coverage.cobertura.xml

MSBuild task integration

安裝以下 Package:

dotnet add package coverlet.msbuild

建立 Code Coverage 報告:(Test project 會建立 coverage.json 報告)

dotnet test /p:CollectCoverage=true

As a .NET Global tool

透過 dotnet tool 安裝 coverlet 執行檔:

dotnet tool install --global coverlet.console

建立 Code Coverage 報告:

coverlet /path/to/test-assembly.dll --target "dotnet" --targetargs "test /path/to/test-project --no-build"

註:一定要指定參數 --no-build,否則會沒有資料。

MSBuild task integration 進階使用

Threshold

line, branch, method coverage 任何一項低於 80% 時會報錯:

dotnet test /p:CollectCoverage=true /p:Threshold=80

只檢測 line coverage,當低於 80% 時報錯:

dotnet test /p:CollectCoverage=true /p:Threshold=80 /p:ThresholdType=line

個別指定 coverage:

dotnet test /p:CollectCoverage=true /p:Threshold=\\"80,100,70\\" /p:ThresholdType=\\"line,branch,method\\"

根據 Attributes 排除

dotnet test /p:CollectCoverage=true /p:ExcludeByAttribute="Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute"

根據 Source Files 排除

dotnet test /p:CollectCoverage=true /p:ExcludeByFile=\\"**/dir1/class1.cs,**/dir2/*.cs,**/dir3/**/*.cs\\"
專注於 C#, DevOps 的工程師
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
本文介紹瞭如何在C#專案中建立和使用packages.lock.json檔案,以確保每次執行dotnet restore時都可以獲得相同的packages集合。我們還討論了dotnet restore抓取不同packages的原因,並提供了相關的解決方案。
Semgrep 是一個功能強大的 SAST 工具,可以幫助開發人員早期發現程式碼中的安全問題,本文介紹如何將 Semgrep 整合到 GitLab Pipeline 以進行 SAST 掃描。
說明 Dockerfile 的 ENTRYPOINT、CMD 指令。
Docker network 會影響 Container: 是否可以透過網路存取其它的 Container。 是否可以存取網際網路(Internet)。 是否可以存取實體網路(Physical Network)。 Docker bridg
CI/CD Pipeline 是一連串自動化步驟,可以測試軟體,部屬應用程式。但實際上到底要做什麼事情呢?可以從 GitLab 的 Auto DevOps 了解。 Auto Dependency Scanning 掃描第三方函式庫的安全性漏洞。參考下圖: 如果是 .NET 6 可以用以下指令掃描:
Prometheus 提供 PromQL 讓我們對 metrics 查詢,可以查出最近 1 小時內的請求成功率,最近 30 分鐘內的請求延遲等等的資訊,下面用範例說明。 Request Per Second 此範例查詢「每秒的請求數量」,我用 Traefik 當作範例說明。 這幫我們得出以下結果:
本文介紹瞭如何在C#專案中建立和使用packages.lock.json檔案,以確保每次執行dotnet restore時都可以獲得相同的packages集合。我們還討論了dotnet restore抓取不同packages的原因,並提供了相關的解決方案。
Semgrep 是一個功能強大的 SAST 工具,可以幫助開發人員早期發現程式碼中的安全問題,本文介紹如何將 Semgrep 整合到 GitLab Pipeline 以進行 SAST 掃描。
說明 Dockerfile 的 ENTRYPOINT、CMD 指令。
Docker network 會影響 Container: 是否可以透過網路存取其它的 Container。 是否可以存取網際網路(Internet)。 是否可以存取實體網路(Physical Network)。 Docker bridg
CI/CD Pipeline 是一連串自動化步驟,可以測試軟體,部屬應用程式。但實際上到底要做什麼事情呢?可以從 GitLab 的 Auto DevOps 了解。 Auto Dependency Scanning 掃描第三方函式庫的安全性漏洞。參考下圖: 如果是 .NET 6 可以用以下指令掃描:
Prometheus 提供 PromQL 讓我們對 metrics 查詢,可以查出最近 1 小時內的請求成功率,最近 30 分鐘內的請求延遲等等的資訊,下面用範例說明。 Request Per Second 此範例查詢「每秒的請求數量」,我用 Traefik 當作範例說明。 這幫我們得出以下結果:
你可能也想看
Google News 追蹤
Thumbnail
Leetcode 精選75題 題目與題解 熱門考點 目錄 (持續更新中) 建議從左側目錄 或者 按Ctrl+F輸入關鍵字進行搜尋
Thumbnail
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
測試網站和應用程式時需要注意以下事項和執行以下工作: 注意事項: 跨平台相容性: 確保網站或應用程式在各種瀏覽器和設備上的相容性,包括桌面、平板和手機等。 響應式設計測試: 測試網站或應用程式在不同螢幕尺寸和解析度下的表現,確保響應式設計正常運作。 安全性測試: 確保網站或應用程式的安全性,
Thumbnail
Leetcode 精選75題 題目與題解 熱門考點 目錄 (持續更新中) 建議從左側目錄 或者 按Ctrl+F輸入關鍵字進行搜尋
Thumbnail
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
測試網站和應用程式時需要注意以下事項和執行以下工作: 注意事項: 跨平台相容性: 確保網站或應用程式在各種瀏覽器和設備上的相容性,包括桌面、平板和手機等。 響應式設計測試: 測試網站或應用程式在不同螢幕尺寸和解析度下的表現,確保響應式設計正常運作。 安全性測試: 確保網站或應用程式的安全性,