Skip to content

1. 配置单元测试运行设置

https://learn.microsoft.com/zh-cn/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file?view=vs-2022#specify-a-run-settings-file-from-the-command-line

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.coverage

7.使用 ReportGenerator 等工具转换 html 格式等

https://github.com/danielpalme/ReportGenerator

https://reportgenerator.io/usage

bash
reportgenerator -reports:CoverageReport.xml -targetdir:coveragereport

打开 index.html,最终效果如下:

8.转换 pdf 文件

方式 1:使用谷歌浏览器-打印另存为 pdf,操作如下: