dotCover 2025.2 Help

使用命令行工具进行覆盖率分析

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 help

配置 dotCover 命令行工具

要配置 dotCover 命令行工具,您可以使用命令行参数或纯文本响应文件。

例如:

dotCover cover --xml-report-output AppCoverageReport.xml -- test "C:\MyProject\MainTests.csproj"
  • 在所有操作系统上,您都可以使用相同的参数语法。

  • 参数应使用 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 项目中的单元测试覆盖率

  1. 打开解决方案文件夹。

  2. 构建解决方案:

    dotnet build
  3. 运行带覆盖率分析的测试并获取覆盖率快照:

    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 项目中的单元测试覆盖率

  1. 确保您的单元测试项目已构建。

  2. 使用覆盖率分析运行测试并获取覆盖快照。 例如:使用 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 项目。

  1. 构建解决方案:

    dotnet build
  2. 运行所有测试以进行覆盖分析并保存快照:

    dotCover cover --snapshot-output snapshot.dcvr -- test --no-build
  3. 如需生成报告而非快照或同时生成报告,请使用报告输出参数:

    dotCover cover --xml-report-output report.xml -- test --no-build

项目使用不同的测试框架

如果您的解决方案包含使用不同单元测试框架(例如 MSTest 与 NUnit)的测试项目,则需要分别为每个项目运行覆盖分析,然后将生成的覆盖快照合并成一个报告。

dotCover:将覆盖率快照合并为单个报告
  1. 为每个测试项目创建一个响应文件。 这些文件将定义每个测试的执行方式以及快照的保存位置。

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

    args2.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
  2. 对每个项目运行覆盖分析:

    dotCover cover @args1.txt dotCover cover @args2.txt

    这将生成两个快照文件: Snapshot1.dcvrSnapshot2.dcvr

  3. 将多个快照合并为一个:

    dotCover merge --snapshot-source Snapshot1.dcvr,Snapshot2.dcvr --snapshot-output MergedSnapshots.dcvr
  4. 从合并的快照生成覆盖率报告:

    dotCover report --snapshot-source MergedSnapshots.dcvr --xml-report-output CoverageReport.xml

查找符号文件(PDB)

定位目标二进制文件的符号文件(PDB)对于计算覆盖率至关重要。 如果您 覆盖单元测试覆盖启动项目 ,dotCover 可以轻松利用当前解决方案的结构定位符号文件。

默认情况下,dotCover 在以下位置搜索符号文件:

  • 在与二进制文件相同的目录中,

  • 在二进制文件中指定的调试目录中,

  • _NT_SYMBOL_PATH 环境变量与注册表中指定的所有目录中。

最后修改日期: 2025年 9月 27日