声纳错误的整体覆盖(jacoco)

Sonar false overall coverage (jacoco)

我在多模块 Java8 项目上 运行ning Jacoco 和 Sonar。 我在每个模块中都有单元测试,为了节省资源,我将所有 'integration tests' 收集到一个“集成测试-运行ner”和 运行 中(用 before 和经过测试)。

测量覆盖率时,UT 为每个模块生成 exec 文件 target/jacoco-ut.exec,而 IT 生成一个 exec 文件:/target/jacoco-it.exec.

当我 运行 声纳时,我重复使用那些 exec 文件,为 jacoco-it.exec.

提供路径

我得到一个非常奇怪的图像:

怎么会整体覆盖率较低?

为什么这么奇怪?单元测试和集成测试执行代码,某些执行的代码块重叠。换句话说,单元测试和集成测试覆盖的代码是不相交的,因此你不能简单地将它们相加。

我找到了问题和解决方案。

From Sonar website I see this:

By default, when no coverage report is found, the JaCoCo plugin will not set any value for coverage metric. This behaviour can be overriden to force coverage to 0% in case of a lack of report by setting the following property : sonar.jacoco.reportMissing.force.zero=true


这意味着未进行任何测试的模块将跳过 UT 分析。 因为我已经从父 pom 设置了 sonar.jacoco.itReportPath,所以 all 模块分析了集成测试覆盖率和 overall 覆盖率。

底线:从父 pom 设置 属性 sonar.jacoco.reportMissing.force.zero=true 固定数字。