dotCover 2025.2 Help

在 JetBrains TeamCity 上设置覆盖率

通常,.NET 解决方案的持续集成 (CI) 构建由一系列任务组成,这些任务包括编译和运行测试。 在 JetBrains TeamCity CI 服务器中,这些任务被称为构建步骤。 由于 TeamCity 自带 dotCover 命令行工具 ,您只需启用相应的构建步骤选项即可收集代码覆盖率数据。 TeamCity 收集的覆盖率结果可以在 TeamCity 内查看为报告,或者下载为 覆盖率快照 并在 Visual Studio 中查看。

例如,我们有一个由两个项目组成的简单解决方案:一个是应用程序,另一个是测试程序集。 我们的任务是设置持续集成构建,编译应用程序,运行测试,并收集测试覆盖率统计数据。 请注意,工作流程因您使用的单元测试运行器而异:

MSTest/NUnit

MSTest 和 NUnit 测试运行器由 TeamCity 开箱即用提供,因此,通常您只需添加一个带有相应运行器的构建步骤。

在 TeamCity 中设置 MSTest/NUnit 测试的覆盖率分析

  1. 在 TeamCity 中,创建一个 新构建项目并设置 VCS 根。 然后添加一个新的构建步骤:在项目中创建一个 新项目和一个 新构建配置

  2. 添加第一个构建步骤,该步骤将构建解决方案和测试。 在我们的特定示例中,我们使用 .NET 运行器(需要在构建代理上安装以下 软件 ),但您还有许多其他构建选项:直接运行 MSBuild、运行批处理文件等。

    TeamCity 构建步骤

    请注意,我们在这里所做的只是构建解决方案。 尚未设置覆盖率。

  3. 添加一个运行测试的构建步骤。 如果您使用 MSTest 测试,请选择带有 `vstest` 作为 命令.NET 运行器。 我们的示例解决方案使用 NUnit 测试,因此我们选择 NUnit 运行器。 在这里,我们还指定了 NUnit 版本、.NET 运行时参数和测试程序集的路径。

    TeamCity 构建步骤:运行测试
  4. 现在,是时候设置覆盖率了。 在 .NET 覆盖工具 中,选择 JetBrains dotCover

    TeamCity 构建步骤:覆盖率
  5. 程序集过滤器 中,添加您想要覆盖的程序集(仅需程序集名称),并在前面加上 +: ,过滤掉您不想覆盖的程序集,使用 –:。 在我们的示例中,我们排除了包含运行测试的 MainTests 程序集。

  6. 保存配置并运行它以查看效果。

  7. 构建完成后, 概览 选项卡将包含关于代码覆盖率的简短报告。

    TeamCity 运行概览

    要查看详细信息,请切换到 代码覆盖率 选项卡。 在这里,您可以查看测试覆盖了多少类/方法的详细统计信息。

    TeamCity 代码覆盖率报告

    甚至可以深入到单个类并检查代码覆盖率。

    TeamCity. 源代码上显示的代码覆盖率

    构建产物现在包含压缩的覆盖率文件。

    TeamCity. 构建产物
  8. 请注意,在实际环境中,您可能有两个不同的构建配置:一个用于构建二进制文件,另一个用于收集代码覆盖率。 在这种情况下,您应该使用快照依赖项,以便第二个构建配置可以找到源文件。 否则,在尝试查看源代码时,您将看到 Source code is not available 消息。

    TeamCity. 无源代码

    要解决此问题,请按照 TeamCity 文档 中的说明操作。

xUnit

运行和获取 xUnit 测试覆盖率的主要问题是 TeamCity 并未开箱即用支持 xUnit。 这会产生两个必须解决的问题:

  1. 必须提供 xUnit 包以构建解决方案。

    将二进制库提交到 VCS 不是一个好的做法,因此,在编译阶段之前,恢复包必须是一个单独的构建步骤。

  2. 必须手动提供并运行 xUnit 测试运行器。

    好消息是:

    • 运行器作为 NuGet 包分发,因此可以直接在您的解决方案中引用,然后在构建期间恢复(参见 a)。

    • 无需额外操作即可获取测试结果,因为运行器以 TeamCity 服务消息的格式提供结果。

在 TeamCity 中设置 xUnit 测试的覆盖率分析

  1. 在 Visual Studio 中,打开您的解决方案。 在测试项目中,添加对 xunit.runner.console NuGet 包的引用。

    安装 XUnit 控制台运行器
  2. 在 TeamCity 中,创建一个 新构建项目并设置 VCS 根。 然后添加一个新的构建步骤:在项目中创建一个 新项目和一个 新构建配置

  3. 确保 TeamCity 被配置为 NuGet 服务器:在 管理 | 工具 中找到 NuGet.exe 表,并检查是否包含所需的 NuGet 版本。 如果没有这样的表,请通过点击 安装工具... 按钮并按照所需步骤将 NuGet 添加到 TeamCity。

    TeamCity. XUnit NuGet 服务器
  4. 添加一个构建步骤,用于恢复解决方案引用的 NuGet 包。 使用 NuGet 安装程序 作为 运行器类型

    TeamCity. NuGet 安装程序步骤
  5. 添加第一个构建步骤,该步骤将构建解决方案和测试。 在我们的特定示例中,我们使用 .NET 运行器(需要在构建代理上安装以下 软件 ),但您还有许多其他构建选项:直接运行 MSBuild、运行批处理文件等。

    TeamCity 构建步骤

    请注意,我们在这里所做的只是构建解决方案。 尚未设置覆盖率。

  6. 添加一个运行测试的构建步骤:

    • 由于 xUnit 运行器将作为一个简单的 .exe 文件执行,请选择 .NET 运行器。

    • 命令 中,选择 <custom>

    • 由于运行器作为解决方案中的一个包提供,您可以相对于解决方案工作目录指定其路径,例如:

      %system.teamcity.build.workingDir%\SimpleTestsProject\packages\xunit.runner.console.2.3.1\tools\net452\xunit.console.exe
    • 命令行形参 字段必须包含已编译测试程序集的路径。

    TeamCity 构建步骤。 运行并覆盖
  7. 现在,是时候设置覆盖率了。 在 .NET 覆盖工具 中,选择 JetBrains dotCover

    TeamCity. XUnit 覆盖率步骤
  8. 程序集过滤器 中,添加您想要覆盖的程序集(仅需程序集名称),并在前面加上 +: ,过滤掉您不想覆盖的程序集,使用 –:。 在我们的示例中,我们排除了包含运行测试的 MainTests 程序集以及与 xUnit 程序集相关的所有内容。

  9. 保存配置并运行它以查看效果。

  10. 构建完成后, 概览 选项卡将包含关于测试结果和代码覆盖率的简短报告。

    TeamCity. XUnit 运行概览

    要查看详细信息,请切换到 代码覆盖率 选项卡。 在这里,您可以查看测试覆盖了多少类/方法的详细统计信息。

    TeamCity. XUnit 覆盖率统计

    甚至可以深入到单个类并检查代码覆盖率。

    TeamCity. 源代码上显示的代码覆盖率

    构建产物现在包含压缩的覆盖率文件。

MSpec

MSpec 部分由 TeamCity 开箱即用支持:它有一个相应的构建步骤运行器,但 MSpec 测试运行器不在捆绑包中,必须手动安装到 TeamCity 代理。 幸运的是,运行器作为 NuGet 包分发,因此可以直接在您的解决方案中引用,然后在构建期间恢复。

在 TeamCity 中设置 MSpec 测试的覆盖率分析

  1. 在 Visual Studio 中,打开您的解决方案。 在测试项目中,添加对 Machine.Specifications.Runner.Console NuGet 包的引用。

    通过 NuGet 安装 MSpec
  2. 在 TeamCity 中,创建一个 新构建项目并设置 VCS 根。 然后添加一个新的构建步骤:在项目中创建一个 新项目和一个 新构建配置

  3. 确保 TeamCity 被配置为 NuGet 服务器:在 管理 | 工具 中找到 NuGet.exe 表,并检查是否包含所需的 NuGet 版本。 如果没有这样的表,请通过点击 安装工具... 按钮并按照所需步骤将 NuGet 添加到 TeamCity。

    TeamCity. XUnit NuGet 服务器
  4. 添加一个构建步骤,用于恢复解决方案引用的 NuGet 包。 使用 NuGet 安装程序 作为 运行器类型

    TeamCity. NuGet 安装程序步骤
  5. 添加第一个构建步骤,该步骤将构建解决方案和测试。 在我们的特定示例中,我们使用 .NET 运行器(需要在构建代理上安装以下 软件 ),但您还有许多其他构建选项:直接运行 MSBuild、运行批处理文件等。

    TeamCity 构建步骤

    请注意,我们在这里所做的只是构建解决方案。 尚未设置覆盖率。

  6. 添加一个运行测试的构建步骤:

    • 运行器类型 中选择 MSpec

    • 由于运行器作为解决方案中的一个包提供,您可以相对于解决方案工作目录指定其路径,例如:

      %system.teamcity.build.workingDir%\SimpleTestsProject\packages\Machine.Specifications.Runner.Console.0.9.3\tools\mspec-clr4.exe

      确保您使用的运行器版本与项目目标 .NET Framework 版本相对应。

    • 从此处运行测试 中,指定已编译测试程序集的路径。

    • 如果需要,请在 包含规范排除规范 中指定必须包含/排除的规范。

    TeamCity. MSpec 测试运行器步骤
  7. 现在,是时候设置覆盖率了。 在 .NET 覆盖工具 中,选择 JetBrains dotCover

    TeamCity. MSpec 覆盖率步骤
  8. 程序集过滤器 中,添加您想要覆盖的程序集(仅需程序集名称),并在前面加上 +: ,过滤掉您不想覆盖的程序集,使用 –:。 在我们的示例中,我们排除了包含运行测试的 MSpecTests 程序集以及与 MSpec 程序集相关的所有内容。

  9. 保存配置并运行它以查看效果。

  10. 构建完成后, 概览 选项卡将包含关于测试结果和代码覆盖率的简短报告。

    TeamCity. MSpec 测试运行概览

    要查看详细信息,请切换到 代码覆盖率 选项卡。 在这里,您可以查看测试覆盖了多少类/方法的详细统计信息。

    TeamCity. MSpec 测试覆盖率统计

    甚至可以深入到单个类并检查代码覆盖率。

    TeamCity. MSpec 测试覆盖率显示在源代码上

    构建产物现在包含压缩的覆盖率文件。

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