1. 配置单元测试运行设置
https://learn.microsoft.com/zh-cn/visualstudio/test/customizing-code-coverage-analysis?view=vs-2022
添加 xml 配置文件,上面两个链接是微软的文档,下面是国际项目测试的配置,按需调整,
主要是 ModulePaths - Exclude 排除哪些 dll 配置:
xml
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<ResultsDirectory>.\TestResults</ResultsDirectory>
<TargetPlatform>x64</TargetPlatform>
<TargetFrameworkVersion>netcoreapp3.1</TargetFrameworkVersion>
</RunConfiguration>
<!-- 测试运行参数 -->
<TestRunParameters>
</TestRunParameters>
<!-- MSTest 适配器选项 -->
<MSTest>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>false</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
</MSTest>
<!-- Configurations for data collectors -->
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Exclude>
<ModulePath>.*cnaws.*</ModulePath>
<ModulePath>.*microsoft.*</ModulePath>
<ModulePath>.*pipelines.sockets.*</ModulePath>
<ModulePath>.*stackexchange.*</ModulePath>
</Exclude>
</ModulePaths>
<!-- We recommend you do not change the following values: -->
<UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
<AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
<CollectFromChildProcesses>True</CollectFromChildProcesses>
<CollectAspDotNet>False</CollectAspDotNet>
</CodeCoverage>
</Configuration>
</DataCollector>
<DataCollector uri="datacollector://microsoft/VideoRecorder/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder.VideoRecorderDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Screen and Voice Recorder">
<!--Video data collector was introduced in Visual Studio 2017 version 15.5 -->
<Configuration>
<!-- Set "sendRecordedMediaForPassedTestCase" to "false" to add video attachments to failed tests only -->
<MediaRecorder sendRecordedMediaForPassedTestCase="true" xmlns="">
<ScreenCaptureVideo bitRate="512" frameRate="2" quality="20" />
</MediaRecorder>
</Configuration>
</DataCollector>
<!-- Configuration for blame data collector -->
<DataCollector friendlyName="blame" enabled="True">
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>然后在 vs 配置测试设置

3.分析代码覆盖率

4.得出分析结果.coverage 文件

5.查看 CodeCoverage 结果

点入具体方法,可以查看具体哪些代码没有覆盖到,如下图,浅黄色的为未覆盖的。

6.CodeCoverage 转换成 xml 格式
"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" 这个地址按需调整,不是企业版的貌似没有
bash
"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output:CoverageReport.xml yb_YUNBAI_2024-09-08.15_54_19.coverage7.使用 ReportGenerator 等工具转换 html 格式等
https://github.com/danielpalme/ReportGenerator
https://reportgenerator.io/usage
bash
reportgenerator -reports:CoverageReport.xml -targetdir:coveragereport打开 index.html,最终效果如下:

8.转换 pdf 文件
方式 1:使用谷歌浏览器-打印另存为 pdf,操作如下:

