我遇到了一个非常奇怪的现象:
我们的CI系统(带有Maven和Sonar插件的Jenkins)在签到时运行Maven测试版本(工作正常)并使用Sonar整合运行夜间构建(运行正常,直到上周)。 现在每晚构建编译并运行测试(全绿色)并调用Sonar插件。 静态分析后,声纳启动JaCoCo测量直到测试覆盖范围;当JaCoco运行单元测试(再次)时,很多都会按预期运行,但是第一次测试会抛出一个异常(在常规运行中没有引发)关于创建已经存在的对象,以及稍后的一些测试尝试回滚事务(通常不回滚)时进程冻结。
没有更新任何组件,并且在失败的测试周围没有进行任何可疑的代码更改。
有人知道,JaCoCo如何区别对待单元测试以及如何解决这个问题?
答案 0 :(得分:1)
首先阅读我的FAQ
你在说:
现在每晚构建编译并运行测试(全部为绿色)并调用 Sonar插件......当JaCoco运行单元测试时(再次)
声纳插件有什么作用?主要目的是收集测试报告,包括jacoco并将其发送给声纳。它可以为您运行测试并立即收集数据,但这不是您所期望的。如果您只想将测试覆盖率发送到声纳服务器,请使用sonar.dynamicAnalysis=reuseReports
参数运行您的声纳插件。它不会再次运行你的测试。
你的测试在没有声纳插件的情况下运行良好,然后声纳插件打破了它们?如果你的测试需要你没有传递给声纳插件的额外java参数(-Dcom.stackoverflow=somevalue
),或者你可能正在使用特殊的maven配置文件(-Psomeprofile
)并且不需要'在调用声纳插件时这样做
顺便说一下:
当JaCoco运行单元测试时(再次)
Jacoco无法运行测试。您的单元测试必须使用jacoco插件/代理启动,以便jacoco为您保存*.exec
文件。如果您看到此文件(最常见于目标目录),您至少可以正确运行jacoco。