引言
在前幾章我們深度講解了單元測試和集成測試的基礎(chǔ)知識,這一章我們來講解一下代碼覆蓋率
,代碼覆蓋率是單元測試運行的度量值
,覆蓋率通常以百分比表示,用于衡量代碼被測試覆蓋的程度,幫助開發(fā)人員評估測試用例的質(zhì)量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage
)、分支覆蓋率(Branch Coverage
)、路徑覆蓋率(Path Coverage
)等,不同類型的覆蓋率可以幫助開發(fā)人員更全面地了解測試用例對代碼的覆蓋情況,從而改進(jìn)測試策略和提高代碼質(zhì)量。
核心組件
本文介紹如何通過 Coverlet
在單元測試中使用代碼覆蓋率和使用 ReportGenerator
生成報表。
什么是Coverlet
?
Coverlet
是GitHub
上的開源項目,可為C#
提供跨平臺代碼覆蓋率框架,Coverlet
是.NET Foundation
的一部分,Coverlet
收集Cobertura
覆蓋率測試運行數(shù)據(jù),用于生成報表。
什么是ReportGenerator
?
ReportGenerator
將由Cobertura
生成的覆蓋率報表轉(zhuǎn)換為各種格式的用戶可讀的報表。
代碼覆蓋率實戰(zhàn)
我們在之前的項目中創(chuàng)建了Sample.Api
和Sample.Repository
用作我們單元測試和集成測試的Demo
項目,接下來我們用這個項目來做一下單元測試覆蓋。
- 創(chuàng)建
xUnit
測試項目
然后看一下csproj
的XML
文件
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
</ItemGroup>
從上面可以看出xUnit
的測試項目已經(jīng)默認(rèn)對coverlet.collector
添加了支持
我們在講解在單元測試中使用依賴注入時,用Sample.Repository
做的單元測試,我們把之前的代碼Copy
一份,到新的測試項目,添加和講解依賴注入時一樣的配置。
然后添加對我們Sample.Repository
的項目引用
NuGet\Install-Package Xunit.DependencyInjection -Version 9.1.0
NuGet\Install-Package Xunit.DependencyInjection.Logging -Version 9.0.0
可以看到我們項目基本成型了,但是Copy
過來的代碼還是我們dotNetParadise.DependencyInjection
測試依賴注入時那個類庫。
一個小tips:
鼠標(biāo)點擊我們的測試項目dotNetParadise.CodeCoverage
->右鍵->同步命名空間
可以看到我們的命名空間已經(jīng)被正確替換
同步命名空間功能
-
使用時機: 你想要通過將文件拖動到新文件夾重構(gòu)部分解決方案。
-
操作原因: 你想要確保你的命名空間中的新文件夾結(jié)構(gòu)保持最新。
開始統(tǒng)計
我們可以通過CMD
命令進(jìn)入測試項目類庫的內(nèi)
然后執(zhí)行下面這個命令
dotnet test --collect:"XPlat Code Coverage"
"XPlat Code Coverage"
參數(shù)是與Coverlet
中的數(shù)據(jù)收集器對應(yīng)的易記名稱。 此名稱是必需的,但不區(qū)分大小寫。 若要使用.NET
的內(nèi)置代碼覆蓋率數(shù)據(jù)收集器,請使用"Code Coverage"
。
看一下執(zhí)行完控制臺輸出
通過控制臺反饋我們得知了,生成了一個附件路徑在~\TestResults\2515646c-5845-4bfb-ae14-7e0bf4617b84\coverage.cobertura.xml
作為
dotnet test
運行的一部分,生成的coverage.cobertura.xml
文件輸出到TestResults
目錄 。 該XML
文件包含結(jié)果。 這是一個依賴于.NET CLI
的跨平臺選項,非常適用于不可使用MSBuild
的生成系統(tǒng)。
簡單解讀一下cobertura.xml
代碼覆蓋率報告,提供了關(guān)于代碼單元測試覆蓋率的詳細(xì)信息。其中包含了各種指標(biāo)和數(shù)據(jù),如以下幾點:
-
line-rate
和branch-rate
分別表示語句覆蓋率和分支覆蓋率,均為 0.5,表示被測試覆蓋的比例為 50%。 -
lines-covered
和lines-valid
分別表示被覆蓋的代碼行數(shù)和總代碼行數(shù)。 -
branches-covered
和branches-valid
分別表示被覆蓋的分支數(shù)和總分支數(shù)。 - 在具體的類和方法級別,提供了各自的覆蓋率、復(fù)雜度等信息,以及每行代碼的覆蓋情況(
hits
表示執(zhí)行次數(shù),branch
表示是否為分支語句,condition-coverage
表示條件覆蓋率)。
生成報告
上面提到了coverlet.collector
是用來收集單元測試的指標(biāo)的真正的報告是用 ReportGenerator
生成。
第一步要將 ReportGenerator
NuGet
包安裝為 .NET
全局工具
dotnet tool install -g dotnet-reportgenerator-globaltool
有很多種生成報告的方法如 命令行,添加netconfig等大家可以自行選擇
下面用命令行來演示一下
導(dǎo)航到coverage.cobertura.xml
xml 報告文件下
reportgenerator -reports:"coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:html
輸出:
查看測試報告:
我的路徑:TestResults\b5595744-2bb9-42ab-8c2e-60d544b4b04f\coveragereport
最后
通過創(chuàng)建測試項目并使用 Coverlet
進(jìn)行代碼覆蓋率統(tǒng)計,我們可以得到詳細(xì)的覆蓋率報告。生成的 coverage.cobertura.xml
文件提供了各種指標(biāo)和數(shù)據(jù),如語句覆蓋率、分支覆蓋率等,幫助開發(fā)團隊評估代碼的測試覆蓋情況。
隨后,通過 ReportGenerator
工具生成報表,我們可以將覆蓋率數(shù)據(jù)轉(zhuǎn)換為易讀的報表形式,幫助團隊更直觀地了解測試覆蓋情況,進(jìn)一步優(yōu)化測試策略和提高代碼質(zhì)量。
通過以上實踐,我們能夠更有效地利用代碼覆蓋率工具,提升單元測試的質(zhì)量和效率,從而構(gòu)建更健壯的軟件系統(tǒng)。文章來源:http://www.zghlxwxcb.cn/news/detail-856191.html
??歡迎關(guān)注筆者公眾號一起學(xué)習(xí)交流,獲取更多有用的知識~文章來源地址http://www.zghlxwxcb.cn/news/detail-856191.html
- 單元測試代碼覆蓋率
- 本文完整源代碼
到了這里,關(guān)于單元測試必備:Asp.Net Core代碼覆蓋率實戰(zhàn),打造可靠應(yīng)用 !的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!