Azure DevOps代码覆盖率如何排除NuGet包,仅统计指定自定义DLL?
解决Azure DevOps中DotNet Test代码覆盖率过滤外部依赖的问题
默认情况下,DotNet Test的代码覆盖率收集器会统计所有被测试项目引用的程序集(包括NuGet包),导致你的覆盖率被外部依赖拉低。可以通过以下两种方式精准指定统计范围:
方法一:直接在Test命令中添加过滤参数
修改YAML任务的arguments,通过数据收集器参数显式指定需要统计的程序集:
- stage: Test_application jobs: - job: steps: - task: DotNetCoreCLI@2 displayName: 'DotNet Test' inputs: command: 'test' arguments: '--configuration Release --collect "Code coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Include="[MyLibrary.One.dll],[MyLibrary.Two.dll],[MyLibrary.Three.dll],[MyLibrary.Four.dll]"' projects: '**/MyLibrary.UnitTest.*.csproj'
--用于分隔DotNet Test命令参数和数据收集器的配置参数Include字段指定仅统计你列出的四个业务dll,自动排除外部依赖(如DiffEngine、Moq、Shouldly)和测试项目自身的dll
如果偏好排除规则(而非指定包含项),可以替换为:
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude="[DiffEngine*],[Moq*],[Shouldly*],[MyLibrary.UnitTest*]"
方法二:使用.runsettings配置文件(推荐复杂规则场景)
这种方式更灵活,适合需要多规则过滤的场景:
- 在项目根目录创建
CodeCoverage.runsettings文件,内容如下:
<RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <Configuration> <!-- 仅统计指定的业务dll --> <Include> <ModulePaths> <Include>.*MyLibrary\.One\.dll$</Include> <Include>.*MyLibrary\.Two\.dll$</Include> <Include>.*MyLibrary\.Three\.dll$</Include> <Include>.*MyLibrary\.Four\.dll$</Include> </ModulePaths> </Include> <!-- 可选:用排除规则替代Include --> <!-- <Exclude> <ModulePaths> <Exclude>.*DiffEngine.*\.dll$</Exclude> <Exclude>.*Moq.*\.dll$</Exclude> <Exclude>.*Shouldly.*\.dll$</Exclude> <Exclude>.*MyLibrary\.UnitTest.*\.dll$</Exclude> </ModulePaths> </Exclude> --> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
- 修改YAML任务,指定使用该配置文件:
- stage: Test_application jobs: - job: steps: - task: DotNetCoreCLI@2 displayName: 'DotNet Test' inputs: command: 'test' arguments: '--configuration Release --collect "Code coverage" --settings CodeCoverage.runsettings' projects: '**/MyLibrary.UnitTest.*.csproj'
配置完成后重新运行流水线,代码覆盖率统计将仅包含你指定的四个业务dll,预期会达到31.61%的目标值。
内容的提问来源于stack exchange,提问作者H. Pauwelyn
相关产品推荐
相关产品推荐

