如何在Azure DevOps管道中过滤代码覆盖率结果的外部依赖?
过滤VSTest代码覆盖率中的外部依赖项
要只统计自身代码的覆盖率,核心是通过自定义.runsettings配置文件指定代码覆盖率的包含/排除规则,替代默认的全量收集逻辑。
步骤1:创建代码覆盖率配置文件
在项目根目录创建CodeCoverage.runsettings文件,根据你的项目情况调整以下规则:
<?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=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <Configuration> <CodeCoverage> <!-- 包含需要统计的自身程序集 --> <ModulePaths> <Include> <ModulePath>YourProjectPrefix.*.dll</ModulePath> <!-- 示例:单个项目可直接写<ModulePath>YourBusinessProject.dll</ModulePath> --> </Include> <Exclude> <!-- 排除测试程序集 --> <ModulePath>*.Tests.dll</ModulePath> <!-- 排除微软、系统类库 --> <ModulePath>Microsoft.*.dll</ModulePath> <ModulePath>System.*.dll</ModulePath> <!-- 排除特定第三方NuGet依赖 --> <ModulePath>Newtonsoft.Json.dll</ModulePath> <ModulePath>xunit.*.dll</ModulePath> <!-- 排除原生依赖 --> <ModulePath>*.native.dll</ModulePath> </Exclude> </ModulePaths> <!-- 可选:通过公司名称批量过滤 --> <CompanyNames> <Include> <CompanyName>YourCompanyName</CompanyName> </Include> <Exclude> <CompanyName>Microsoft Corporation</CompanyName> </Exclude> </CompanyNames> <!-- 可选:排除自动生成的代码 --> <Sources> <Exclude> <Source>*.g.cs</Source> <Source>*.generated.cs</Source> </Exclude> </Sources> </CodeCoverage> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
步骤2:修改VSTest任务配置
在YAML中指定使用这个自定义配置文件,覆盖默认的代码覆盖率收集规则:
- task: VSTest@2 displayName: 'Run Tests' inputs: vsTestVersion: 'toolsInstaller' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' codeCoverageEnabled: true runSettingsFile: 'CodeCoverage.runsettings' # 关联自定义配置文件
关键调整说明
- 替换
YourProjectPrefix.*.dll为你实际的业务程序集命名规则,确保只包含需要统计的代码。 - 按需添加/删除
<Exclude>中的模块,覆盖你项目中所有的外部依赖。 - 排除
*.Tests.dll是因为测试代码本身不需要计入覆盖率统计。
内容的提问来源于stack exchange,提问作者nrofis
相关产品推荐
相关产品推荐

