测试代码包含在覆盖率报告中并影响覆盖率
Test code gets included in coverage report and skews coverate rate
我在 Azure DevOps 管道中使用 OpenClover。
问题:尽管 target/site/clover/index.html
中给出的覆盖率,当我在本地 运行 clover 时,(遗憾地)约为 45%,在 Azure DevOps 中为 71%。
原因是 AzDO 中基于 target/site/clover.xml
的覆盖率报告还包括测试代码,通常覆盖率是 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>
在 ReportGenerator 任务中使用 filefilters
而不是 classfilters
有效:
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
filefilters: '-*Test.java'
targetdir: '$(Build.SourcesDirectory)/CoverageResults'
从 ReportGenerator 4.6.4 开始,可以在没有(脆弱的)文件过滤器的情况下排除测试项目。
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
customSettings: 'settings:excludeTestProjects=true'
targetdir: '$(Build.SourcesDirectory)/CoverageResults'
我在 Azure DevOps 管道中使用 OpenClover。
问题:尽管 target/site/clover/index.html
中给出的覆盖率,当我在本地 运行 clover 时,(遗憾地)约为 45%,在 Azure DevOps 中为 71%。
原因是 AzDO 中基于 target/site/clover.xml
的覆盖率报告还包括测试代码,通常覆盖率是 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>
在 ReportGenerator 任务中使用 filefilters
而不是 classfilters
有效:
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
filefilters: '-*Test.java'
targetdir: '$(Build.SourcesDirectory)/CoverageResults'
从 ReportGenerator 4.6.4 开始,可以在没有(脆弱的)文件过滤器的情况下排除测试项目。
- task: reportgenerator@4
inputs:
reports: '$(Build.SourcesDirectory)/target/site/clover/clover.xml'
customSettings: 'settings:excludeTestProjects=true'
targetdir: '$(Build.SourcesDirectory)/CoverageResults'