小提示
使用 Microsoft.Testing.Platform.MSBuild (MSTest、NUnit 和 xUnit 執行程式可傳遞包含)時,安裝 NuGet 套件時,程式碼覆蓋範圍擴充會自動註冊——無需修改程式碼。
您可以使用程式碼覆蓋率功能,來判斷例如單元測試等程式測試所測試的專案程式碼比例。 為了有效防範錯誤,您的測試應該執行或 涵蓋大部分程式碼。
Microsoft程式代碼涵蓋範圍
Microsoft的程式碼涵蓋分析可以應用於受控(CLR)和非受控(原生)程式碼。 同時支援靜態和動態檢測。 此擴充套件需要 Microsoft.Testing.Extensions.CodeCoverage NuGet 套件。
備註
預設會在擴充功能中停用非受控(原生)程式碼涵蓋範圍。 視需要使用旗標 EnableStaticNativeInstrumentation 和 EnableDynamicNativeInstrumentation 加以啟用。
如需非受控程式碼覆蓋範圍的詳細資訊,請參閱 靜態和動態本機化檢測。
這很重要
套件附帶 Microsoft .NET 程式庫,採用閉源但免費使用的授權模式。
如需Microsoft程式代碼涵蓋範圍的詳細資訊,請參閱其 GitHub 頁面。
選項
| 選項 | Description |
|---|---|
--coverage |
使用 dotnet-coverage 工具收集程式代碼涵蓋範圍。 |
--coverage-output |
所產生涵蓋範圍檔案的名稱或路徑。 預設情況下,檔案是 TestResults/<guid>.coverage。 |
--coverage-output-format |
輸出檔案格式。 支援的值為:coverage、xml和 cobertura。 預設值為 coverage。 |
--coverage-settings |
XML 代碼涵蓋範圍設定。 |
備註
在 Microsoft.Testing.Extensions.CodeCoverage 中,IncludeTestAssembly 的預設值是 false,而在 VSTest 以前則是 true。 這意味著測試專案預設被排除。 如需相關資訊,請參閱 程式碼涵蓋範圍配置。
版本相容性
下表顯示不同版本的 Microsoft.Testing.Extensions.CodeCoverage 與 Microsoft.Testing.Platform 之間的相容性:
| Microsoft.Testing.Extensions.CodeCoverage | Microsoft.Testing.Platform |
|---|---|
| 18.1.x | 2.0.x |
| 18.0.x 版本 | 1.8.x 版本 |
| 17.14.x | 1.6.2 |
備註
為了獲得最佳相容性和最新功能,建議同時使用這兩個套件的最新版本。
被單
Coverlet Microsoft 測試平台整合(coverlet.MTP)是 Microsoft.Testing.Platform 的原生擴充套件,實現了 coverlet.collector 功能。
將 coverlet.MTP NuGet 套件加入至您的測試專案:
dotnet add package coverlet.MTP
要收集程式碼覆蓋率,請使用以下 --coverlet 標記執行測試:
dotnet test --coverlet
或者使用 --coverlet flag 執行你的測試執行檔。
dotnet exec <test-assembly.dll> --coverlet
測試執行結束後, coverage.json 會在目前目錄中產生包含結果的檔案。
選項
| 選項 | Description |
|---|---|
--coverlet |
啟用代碼覆蓋率資料收集。 |
--coverlet-output-format <format> |
覆蓋率報告的輸出格式。 支援格式:json、 lcovopencovercoberturateamcity及 。 請多次指定以包含多種格式。 |
--coverlet-include <filter> |
包含與濾波器相符的組件,例如 [Assembly]Type。 可多次指定以添加更多過濾器。 |
--coverlet-include-directory <path> |
為原始檔案提供額外的目錄。 多次指定以增加更多目錄。 |
--coverlet-exclude <filter> |
排除與濾波器匹配的組件,例如 [Assembly]Type。 可多次指定以添加更多過濾器。 |
--coverlet-exclude-by-file <pattern> |
排除與球狀模式相符的原始檔案。 請重複指定以添加更多模式。 |
--coverlet-exclude-by-attribute <attribute> |
排除以特定屬性裝飾的方法或類別。 多次指定以增加更多屬性。 |
--coverlet-include-test-assembly |
將測試組件納入覆蓋報告中。 |
--coverlet-single-hit |
對於程式碼中的每個位置,將命中次數限制為一次。 |
--coverlet-skip-auto-props |
跳過測試覆蓋中自動實作的屬性。 |
--coverlet-does-not-return-attribute <attribute> |
標記方法未回傳的屬性。 多次指定以增加更多屬性。 |
--coverlet-exclude-assemblies-without-sources <value> |
排除沒有原始碼的組件。 值: MissingAll、 MissingAny、 None和 。 |
更多資訊請參考 coverlet.MTP 文件。