我已启用 Cobertura 格式的代码覆盖率,并且尝试从 Azure DevOps 管道中的代码覆盖率分析中排除一些文件(尤其是第 3 方 DLL)。目前,以下是我在管道中获得的输出
此处,第 3 方 DLL 也包含在覆盖率报告中。我想排除所有第 3 方 DLL,例如 FluentAssertion、Microsoft.Azure 等。
下面是我的 YAML 文件中产生上述输出的一些行
- task: VSTest@2
displayName: 'Run .NET Core Unit Tests $(ucSolution)'
continueOnError: true
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\MyApp.*.UnitTests.dll
!**\*TestAdapter.dll
!**\obj\**
!**\ref\**
searchFolder: '$(System.DefaultWorkingDirectory)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
diagnosticsEnabled: true
rerunFailedTests: true
rerunFailedThreshold: '10'
rerunMaxAttempts: '1'
resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results\core'
otherConsoleOptions: '/collect:"Code Coverage;Format=Cobertura"'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage results'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: $(build.ArtifactStagingDirectory)/Test/Results/**/**/*.cobertura.xml
有人可以建议我如何从分析或代码覆盖率报告中排除第 3 方 DLL 吗?
我真的很感谢您提供的任何帮助。
@Jack 提供的解决方案正在使用
dotnet test
和“XPlat 代码覆盖率”。对于 vstest
和“代码覆盖率”,您仍然需要 .runsettings 文件,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Exclude>
<ModulePath>FluentAssertions.*</ModulePath>
<!-- Add more ModulePath nodes here. -->
</Exclude>
</ModulePaths>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
(与其他解决方案相比,注意额外的
<CodeCoverage>
节点)
接下来,使用
runSettingsFile
参数引用 vstest 任务中的设置文件,如下所示:
- task: VSTest@2
displayName: 'Run .NET Core Unit Tests $(ucSolution)'
continueOnError: true
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\MyApp.*.UnitTests.dll
!**\*TestAdapter.dll
!**\obj\**
!**\ref\**
searchFolder: '$(System.DefaultWorkingDirectory)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
diagnosticsEnabled: true
rerunFailedTests: true
rerunFailedThreshold: '10'
rerunMaxAttempts: '1'
resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results\core'
otherConsoleOptions: '/collect:"Code Coverage;Format=Cobertura"'
runSettingsFile: '<PATH/TO/FILE.RUNSETTINGS>'
将 .runsettings 文件添加到您的解决方案中,并在测试步骤中引用它。运行设置文件将需要
ModulePaths
、Exclude
、ModulePath
节点,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="XPlat code coverage">
<Configuration>
<ModulePaths>
<Exclude>
<ModulePath>.*FluentAssertions.*</ModulePath>
</Exclude>
</ModulePaths>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
管道 yaml 中的示例测试任务。对于您的
VSTest@2
任务来说,它会略有不同,但原理相似。了解我如何为 .net core 测试任务添加参数 --settings MyFolder/.runsettings
- task: DotNetCoreCLI@2
displayName: 'Tests'
inputs:
command: test
projects: 'MyTestProject.csproj'
arguments: '--configuration debug --collect:"XPlat Code Coverage" --settings MyFolder/.runsettings'
publishTestResults: true
testRunTitle: "Run Tests"
可以在此处找到 Microsoft 文档: https://learn.microsoft.com/en-us/visualstudio/test/customizing-code-coverage-analysis?view=vs-2022