You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure DevOps中排除DTO文件并生成coverage.cobertura.xml代码覆盖率文件的方法

在Azure DevOps中排除DTO文件并生成coverage.cobertura.xml代码覆盖率文件的方法

我来帮你搞定这个问题!结合你遇到的情况,我们需要同时解决两个核心点:一是让使用runsettings配置时能正常生成coverage.cobertura.xml文件,二是确保所有带DTO标识的文件都被排除在代码覆盖率统计之外。

1. 修正RunSettings配置文件

你的现有runsettings缺少了指定覆盖率报告格式的关键配置,这也是本地使用该文件时无法生成Cobertura格式文件的原因。另外,原来的DTO排除正则表达式不够精准,咱们一起调整:

<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
  <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>
            <!-- 强制生成Cobertura格式的覆盖率报告 -->
            <ReportOutputFormat>Cobertura</ReportOutputFormat>
            <ModulePaths>
              <Exclude>
                <!-- 精准匹配所有含DTO的程序集和源码文件 -->
                <ModulePath>.*DTO\.dll$</ModulePath>
                <ModulePath>.*DTO\.cs$</ModulePath>
              </Exclude>
            </ModulePaths>
            <!-- 保留微软推荐的默认配置,不要修改 -->
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
            <CollectFromChildProcesses>True</CollectFromChildProcesses>
            <CollectAspDotNet>False</CollectAspDotNet>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

这里的关键修改:

  • 添加<ReportOutputFormat>Cobertura</ReportOutputFormat>:明确告诉代码覆盖率收集器输出Cobertura格式的报告;
  • 优化排除正则:分别匹配以DTO.dll和DTO.cs结尾的文件,确保所有DTO相关代码都被排除统计。

2. 调整本地测试命令

用修正后的runsettings,执行下面的命令就能生成coverage.cobertura.xml了:

dotnet test --configuration Release --collect:"Code coverage" --settings ./cover.runsettings

默认情况下,生成的文件会放在TestResults/{随机GUID}/coverage.cobertura.xml目录下,你可以加上--results-directory参数指定固定输出目录,方便查找:

dotnet test --configuration Release --collect:"Code coverage" --settings ./cover.runsettings --results-directory ./TestResults

3. 更新Azure DevOps Pipeline任务

你的现有Pipeline任务已经指定了runsettings,但咱们可以优化参数,确保文件能被正确保留,还能可选地在DevOps平台展示覆盖率报告:

- task: DotNetCoreCLI@2
  displayName: "Run Tests"
  inputs:
    command: "test"
    projects: |
      TestCodeCoverage\Domain.Tests\Domain.Tests.csproj
    arguments: '--configuration $(BuildConfiguration) --collect:"Code coverage" --settings TestCodeCoverage/cover.runsettings --results-directory $(Build.ArtifactStagingDirectory)/TestResults'

# 可选步骤:把覆盖率报告发布到Azure DevOps,方便直观查看
- task: PublishCodeCoverageResults@1
  displayName: "Publish Code Coverage"
  inputs:
    codeCoverageTool: "Cobertura"
    summaryFileLocation: "$(Build.ArtifactStagingDirectory)/TestResults/**/coverage.cobertura.xml"

优化点说明:

  • --results-directory $(Build.ArtifactStagingDirectory)/TestResults:把测试结果(包括覆盖率文件)放到构建工件目录,方便后续保存或发布;
  • 新增的PublishCodeCoverageResults@1任务:会在Pipeline的结果页面展示覆盖率统计,你能直接看到DTO被排除后的覆盖率数据。

备注:内容来源于stack exchange,提问作者FMax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:37:58