使用coverlet統計單元測試的程式碼覆蓋率
單元測試是個好東西, 可以在一定程度上兜底
雖然寫單元測試這件事情非常麻煩
但是好的單元測試可以顯著提高程式碼品質, 減少bug, 避免無意中的修改導致其他模組出錯
寫測試用例的過程中, 靠人力去確保所有程式碼都被覆蓋是一件挺麻煩的事情
本文主要介紹如何在xunit下使用coverlet統計測試覆蓋率
環境介紹
系統: wsl2
編輯器: vscode
插件: C# + Coverlet + Coverage Gutters
程式碼
TestFunc.cs
public class TestFunc
{
public static string Test1()
{
return "Test1";
}
public static string Test2()
{
return "Test2";
}
}
測試程式碼:
[Fact]
public void Test1()
{
Assert.True(TestFunc.Test1()=="Test1");
Assert.False(TestFunc.Test1()=="Test2");
}
通過 dotnet test
運行後
只會顯示多少通過, 多少失敗, 並不知道哪些程式碼被覆蓋到了
顯示覆蓋率
修改csproj
首先需要修改單元測試項目的 csproj
文件
在開頭的 PropertyGroup
塊中添加
<CollectCoverage>true</CollectCoverage>
<CoverletOutputFormat>cobertura</CoverletOutputFormat>
用於生成測試的覆蓋報告 coverage.cobertura.xml
之後在 ItemGroup
中添加
<PackageReference Include="coverlet.msbuild" Version="3.1.0"/>
之後運行 dotnet test
測試
就會多顯示一些覆蓋率的內容
查看具體的覆蓋情況
安裝 Coverlet 和 Coverage Gutters 插件之後
進入被調用的文件內, 在vscode下方狀態欄中會顯示當前文件的覆蓋率情況
上圖為初始狀態
點擊這個 Watch 之後會開始解析 coverage.cobertura.xml
之後會顯示當前文件覆蓋率
同時編輯器窗口中也會通過比較顯眼的綠色(覆蓋)紅色(未覆蓋)標記覆蓋情況