使用命令行工具进行覆盖率分析
dotCover 命令行工具允许您:
使用任意测试运行程序(如 MSTest、NUnit、xUnit、MSpec 等)运行覆盖率分析,并在 覆盖快照中记录已执行测试的覆盖率,
使用 merge命令合并覆盖快照,例如合并使用不同测试框架的单元测试的快照,
使用 report命令生成不同格式的覆盖率报告,
以及 更多命令。
支持的操作系统
该工具作为 .NET 命令行工具适用于 Windows(x86、x64、arm64)、Linux(x64、arm32、arm64、musl-x64、musl-arm64)和 macOS(x64、arm64)平台。
分发格式
该工具作为跨平台的框架依赖 .NET 工具分发(需要安装 .NET)。 查看 NuGet 包
安装 dotCover 命令行工具
安装 dotCover 命令行工具的主要方式是将其安装为 .NET 工具。 如果您希望在本地计算机或 CI/CD 服务器上运行覆盖率分析,推荐使用此方法。
将 dotCover 安装为计算机上所有项目的全局工具
运行:
dotnet tool install --global JetBrains.dotCover.CommandLineTools
将 dotCover 安装为特定项目/目录的本地工具
运行:
dotnet tool install JetBrains.dotCover.CommandLineTools --tool-path "some/path"
安装后,您可以从任何目录(如果是全局安装)或安装目录(如果是本地安装)使用 dotCover 命令运行命令行工具。 例如:
配置 dotCover 命令行工具
要配置 dotCover 命令行工具,您可以使用命令行参数或纯文本响应文件。
例如:
在所有操作系统上,您都可以使用相同的参数语法。
参数应使用 kebab-case 格式书写,例如:
--target-executable参数名称和值之间应用空格分隔,例如:
--target-executable MyApp.exe对于包含空格的路径,请使用额外的双引号及反斜杠进行转义,例如:
... --target-arguments "\"D:\My Projects\My Application\bin\Debug\AppTests.dll"\"相对路径将以工作目录为基准进行解析。
如果未指定输出参数,工具将默认生成一个覆盖快照(
.dcvr)。 如需获取报告,请使用--json-report-output或--xml-report-output。 如需同时获取两个结果,请指定--snapshot-output和报告输出选项。使用响应文件简化复杂的参数集,例如:
dotCover cover @args.txt有关参数的完整列表,请参阅 命令参考。
分析 .NET 项目中的单元测试覆盖率
打开解决方案文件夹。
构建解决方案:
dotnet build运行带覆盖率分析的测试并获取覆盖率快照:
dotCover cover --snapshot-output snapshot.dcvr -- test --no-build如需仅获取报告或在快照基础上同时获取报告,请添加
--json-report-output或--xml-report-output参数:dotCover cover --xml-report-output report.xml -- test如果已通过响应文件配置了
dotCover,请指定该文件的路径:dotCover cover @"~/config/config.txt"
分析 .NET Framework 项目中的单元测试覆盖率
确保您的单元测试项目已构建。
使用覆盖率分析运行测试并获取覆盖快照。 例如:使用 NUnit:
dotCover cover --target-executable "D:\Program Files\NUnit 2.6\bin\nunit-console.exe" --target-arguments "D:\Projects\TheApplication\bin\Debug\AppTests.dll" --snapshot-output snapshot.dcvr这里:
--target-executable—— 测试运行程序的路径--target-arguments—— 传递给运行程序的参数(已编译的单元测试程序集)。 请注意,如果这些参数包含带空格的路径,您应使用额外的双引号和反斜杠进行转义,例如:... --target-arguments "\"D:\My Projects\My Application\bin\Debug\AppTests.dll"\"
如需仅获取报告或在快照基础上同时获取报告,请添加
--json-report-output或--xml-report-output参数:dotCover cover --target-executable "D:\Program Files\NUnit 2.6\bin\nunit-console.exe" --target-arguments "D:\Projects\TheApplication\bin\Debug\AppTests.dll" --xml-report-output report.xml如果已通过响应文件配置了
dotCover,请指定该文件的路径:dotCover cover @"D:\Config\config.txt"
应用覆盖率过滤器
使用筛选器可将特定程序集、带有属性标记的代码或外部进程从覆盖率分析中排除。 筛选器有助于减少干扰,并使结果专注于您关心的代码。
--exclude-assemblies <list>—— 要排除的程序集名称,使用英文逗号分隔。 支持通配符(*)。 例如:dotCover cover --exclude-assemblies MyTests,*Helpers--exclude-attributes <list>—— 完全限定的属性名称,使用英文逗号分隔。 所有带有这些属性的代码将被排除。 支持通配符(*)。 例如:dotCover cover --exclude-attributes System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute--exclude-processes <list>—— 要从覆盖率分析中排除的进程名称,使用英文逗号分隔。 支持通配符(*)。 例如:dotCover cover --exclude-processes vstest.discovery.engine您可以结合使用命令行参数和响应文件中定义的筛选器。 dotCover 会合并来自所有来源的所有列表值。 例如:
dotCover cover --exclude-assemblies "*.Tests" @filters.txt在此示例中,
filters.txt可能包含以下内容:--exclude-assemblies ThirdPartyLib --exclude-attributes System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute
分析多个测试项目的覆盖率
如果您的解决方案包含多个测试项目,您可能希望收集这些项目的代码覆盖率并生成统一的报告。 推荐的做法取决于是否所有项目使用相同的单元测试框架。
项目使用相同的测试框架
如果解决方案中的所有测试项目都使用相同的单元测试框架,您可以在单个覆盖会话中运行它们。 此方法仅适用于所有项目可通过单个 dotnet test 调用执行的情况。 适用于使用 SDK 样式项目文件的 MSTest、xUnit 和 NUnit 项目。
构建解决方案:
dotnet build运行所有测试以进行覆盖分析并保存快照:
dotCover cover --snapshot-output snapshot.dcvr -- test --no-build如需生成报告而非快照或同时生成报告,请使用报告输出参数:
dotCover cover --xml-report-output report.xml -- test --no-build
项目使用不同的测试框架
如果您的解决方案包含使用不同单元测试框架(例如 MSTest 与 NUnit)的测试项目,则需要分别为每个项目运行覆盖分析,然后将生成的覆盖快照合并成一个报告。

为每个测试项目创建一个响应文件。 这些文件将定义每个测试的执行方式以及快照的保存位置。
args1.txt对于TestProject1(MSTest):--target-executable "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\MSTest.exe" --target-arguments "TestProject1.dll" --target-working-directory "D:\Projects\MyApp\bin\Debug" --snapshot-output Snapshot1.dcvrargs2.txt对于TestProject2(NUnit):--target-executable "C:\Tools\NUnit\nunit3-console.exe" --target-arguments "TestProject2.dll" --target-working-directory "D:\Projects\MyApp\bin\Debug" --snapshot-output Snapshot2.dcvr对每个项目运行覆盖分析:
dotCover cover @args1.txt dotCover cover @args2.txt这将生成两个快照文件:
Snapshot1.dcvr和Snapshot2.dcvr。将多个快照合并为一个:
dotCover merge --snapshot-source Snapshot1.dcvr,Snapshot2.dcvr --snapshot-output MergedSnapshots.dcvr从合并的快照生成覆盖率报告:
dotCover report --snapshot-source MergedSnapshots.dcvr --xml-report-output CoverageReport.xml
查找符号文件(PDB)
定位目标二进制文件的符号文件(PDB)对于计算覆盖率至关重要。 如果您 覆盖单元测试 或 覆盖启动项目 ,dotCover 可以轻松利用当前解决方案的结构定位符号文件。
默认情况下,dotCover 在以下位置搜索符号文件:
在与二进制文件相同的目录中,
在二进制文件中指定的调试目录中,
在
_NT_SYMBOL_PATH环境变量与注册表中指定的所有目录中。