spring-boot - Sonar/Jacoco 测量的测试覆盖率会因每次提交而无明显原因下降
问题描述
我有一个带有声纳集成的 SpringBoot Maven 多模块项目,配置如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
...
<sonar.projectKey>${project.artifactId}</sonar.projectKey>
<sonar.projectName>${project.artifactId}</sonar.projectName>
<sonar.sources>src/</sonar.sources>
<sonar.tests>src/test/</sonar.tests>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPaths>${project.basedir}/target/jacoco.exec</sonar.jacoco.reportPaths>
<sonar.language>java</sonar.language>
<sonar.exclusions>**/test/**/*</sonar.exclusions>
</properties>
...
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<configuration>
<destFile>${sonar.jacoco.reportPaths}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<output>file</output>
<destFile>${sonar.jacoco.reportPaths}</destFile>
</configuration>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${sonar.jacoco.reportPaths}</dataFile>
<outputDirectory>${project.basedir}/../target/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
现在我遇到了一个奇怪的现象,即这个项目的测试覆盖率(根据 JaCoCo)随着时间的推移而下降。提交只更改一行(之前覆盖和之后覆盖)可能会导致覆盖率降低 0.1%。
这是在重构模块结构之后开始的;在每个子模块以 SpringBoot 作为父模块之前,它被记录为(真正的)父模块的子模块。我改变了它,现在每个模块都将父模块作为父模块,并通过 maven 插件插入 SpringBoot。到目前为止效果很好;只有在那之后,单元测试的数量才下降了 5 个;而记录每个模块的测试。我还无法确定缺少哪些测试,因为我们在这个项目中有数百个测试。
并且(如前所述)随着每次代码更改,检测到的覆盖率都会降低。在模块重构之前显示了近 80% 的覆盖率;现在它已经下降到 26%,没有添加太多代码或删除测试。
更新:我在构建日志中发现了一些警告:
[警告] 以下类与执行数据不匹配:
...
[警告] 为了获得准确的覆盖率度量,必须使用与运行时相同的类文件来生成报告。
[INFO] 没有关于每次测试覆盖率的信息。
给出的是一些类的列表,但到目前为止还不是全部。它们来自任何子模块。我做错了什么?我怎么能对某些类使用另一个编译器/构建链或其他东西?这些不是由其他代理检测的。
解决方案
推荐阅读
- angular - 对 Angular 进行排序的嵌套表是否存在一般问题?
- python - 无法使用 bs4 获取特定标签?
- android - 升级到 Flutter 2.2 后为 Android 调试构建 Flutter 应用程序时出现问题
- android - Office DialogAPI - 下拉菜单不适用于 Android
- python - 如何在 python 中找到 2D 隐式函数的最大 x 值?
- php - 如何计算用户名下的行数?
- performance - 如何找出电池发热的原因
- javascript - 使用 React PDF 的样式列表
- python - Python:使用for循环插入数据而没有超时错误
- javascript - 使用 Javascript 从对象中获取唯一值