我正在Azure DevOps管道中使用OpenClover。
问题:target/site/clover/index.html
中给出的覆盖率(当我在本地运行三叶草时)大约为45%,而在Azure DevOps中则为71%。
这样做的原因是,基于target/site/clover.xml
的AzDO中的覆盖率报告还包含测试代码,该代码通常具有100%的覆盖率,因此会使结果产生偏差。
如何摆脱包含测试代码的覆盖率报告?我试图无济于事的是在ReportGenerator中使用classfilters
-它负责将clover.xml转换为Cobertura,因此AzDO可以解释它。以下两项均无效:
classfilters: '-*Test.java'
classfilters: '-*Test'
classfilters: '-*Test.class'
关于上下文,这是我的管道。
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx1024m'
mavenAuthenticateFeed: true
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.11'
jdkArchitectureOption: 'x64'
publishJUnitResults: false
goals: 'clean clover:setup test clover:aggregate clover:clover'
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
classfilters: '-*Test'
targetdir: '$(Build.SourcesDirectory)/CoverageResults'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(Build.SourcesDirectory)/CoverageResults/Cobertura.xml'
这是pom文件中与三叶草有关的部分:
<build>
<plugins>
<plugin>
<groupId>org.openclover</groupId>
<artifactId>clover-maven-plugin</artifactId>
<version>4.4.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>instrument</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 0 :(得分:1)
在ReportGenerator任务中使用filefilters
代替classfilters
是有效的
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
filefilters: '-*Test.java'
targetdir: '$(Build.SourcesDirectory)/CoverageResults'
答案 1 :(得分:0)
在ReportGenerator 4.6.4中,无需(脆弱的)文件过滤器就可以排除测试项目。
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
customSettings: 'settings:excludeTestProjects=true'
targetdir: '$(Build.SourcesDirectory)/CoverageResults'