我在多模块Java8项目上运行Jacoco和Sonar。 我在每个模块中都进行了单元测试,为了节省资源,我收集了所有的集成测试'进入一个" integration-tests-runner"并在那里运行它们(在测试之前和之后包装它们)。
测量覆盖率时,UT会为每个模块目标/ jacoco-ut.exec生成exec文件,而IT会生成一个exec文件:/target/jacoco-it.exec。
当我运行声纳时,我重用那些exec文件,给出了jacoco-it.exec的路径。
我得到一个非常奇怪的图像:
整体覆盖率如何降低?
答案 0 :(得分:6)
我发现了问题和解决方案。
From Sonar website I see this:
默认情况下,当找不到覆盖率报告时,JaCoCo插件会 没有为覆盖率指标设置任何值。这种行为可以 覆盖以在缺少报告的情况下强制覆盖率为0% 设置以下属性:
sonar.jacoco.reportMissing.force.zero=true
这意味着没有任何测试的模块会跳过UT分析。
由于我已经从父pom设置了sonar.jacoco.itReportPath
,因此所有模块都进行了集成测试覆盖率分析,以及整体覆盖率。
底线:从父pom设置属性sonar.jacoco.reportMissing.force.zero=true
修复了这些数字。
答案 1 :(得分:0)
为什么这很奇怪?单元和集成测试执行代码并且某些执行的代码块重叠。换句话说,单元和集成测试所涵盖的代码并不是不相交的,因此您不能简单地添加它们。