解决maven多模块工程集成jacoco、Sonar后单元测试覆盖率异常问题

最近再做单元测试覆盖率统计问题,最终决定方案是 jacoco+sonar进行数据集成。
但在实现过程中发现由于我们项目是一个maven的多模块工程,数据从jacoco.exec同步至sonar 后无法读取其它模块的覆盖率。
在这里插入图片描述
如上图,使我们的模块划分。单元测试执行完后会在xxxx-user-web 的 target文件夹中生成jacoco.exec,数据同步至sonar后,我发现sonar中的单元测试覆盖率是错误的,完全没有读取到xxxx-user-core 和 xxxx-user-api 这两个模块下代码的覆盖率。

web模块 pom.xml中jacoco的配置
<plugin>
	<groupId>org.jacoco</groupId>
	<artifactId>jacoco-maven-plugin</artifactId>
	<!--当前模块测试报告-->
	<executions>
		<execution>
			<id>report-aggregate</id>
			<phase>test</phase>
			<goals>
				<goal>report-aggregate</goal>
			</goals>
		</execution>
	</executions>
</plugin>

于是开始了漫长的找资料和试错的过程。

  • 方案1:有说升级至JDK11 然后将sonar 版本升级至最新版本。成本太大风险太高放弃了没有尝试
  • 方案2:修改pom配置 增加 ** <append>true</append>** 使用所谓的追加模式。失败,并不能解决问题

最后找到文章:maven多模块工程jacoco、sonar单元测试覆盖率及集成测试覆盖率
里面提到存在官方的多模块案例:https://github.com/SonarSource/sonar-scanning-examples/tree/master/sonarqube-scanner-maven/maven-multimodule

拉取案例分析,发现该案例解决方案是在每个模块都写自己模块的单元测试来实现覆盖率统计的准确性。

但是明显不适用于我们这种工程,我们的单元测试都写在一个模块中。尝试将官方案例的单元测试全部移动至一个模块后,执行 发现并没有奇迹,覆盖率依然是错误的。

这时候的我已经在崩溃边缘,心态爆炸,开启求援模式,拉上项目组中其他同事一起研究解决该问题

最后发现sonar低版本的想要读取到对应模块的覆盖率,有一个要求就是该模块下必须要有jacoco.exec文件

于是我们修改脚本,在单元测试执行完后,将生成的jacoco.exec文件 拷贝至core模块下,最终实现覆盖率准确导入sonar
脚本如下:

{ mvn clean test ; [ $? -ne 0 ] && exit 1 ; }
cp *-web/target/jacoco.exec *-core/target/ &&  mvn sonar:sonar

1、执行测试 如单元测试执行失败则立刻结束;2、拷贝新生成的jacoco.exec至指定目录;3、数据推送至sonar

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhibo_lv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值