声纳错误的整体覆盖(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
固定数字。
我在多模块 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
固定数字。