JaCoCo 单元测试覆盖率反映为整体覆盖率
JaCoCo Unit test coverage is reflected as Overall Coverage
我使用的是SonarQube 4.5.4,SonarQube Runner 版本是2.4。
我已经在 sonar-project.properties
文件中定义了 sonar.jacoco.reportPath=jacoco/jacoco-ut.exec
(集成了 jacoco 作为覆盖工具的 junit4 ant 任务的结果)。
exec 文件看起来不错,它包含每个测试的所有覆盖信息,我用 EclEmma 2.3.2.201409141915 导入了它,所有覆盖信息都在那里。
在 SonarQube 仪表板中,它以一种奇怪的方式反映出来:
cevarage 被视为总体/IT 覆盖率,而不是 UT 覆盖率。并且缺少 UT 覆盖率,顺便说一下,重复率也设置为 0%(这不是真的)
从 Sonar 日志来看,它看起来像这样:
08:24:34.604 INFO - Sensor SurefireSensor done: 713 ms
08:24:34.604 INFO - Sensor JaCoCoOverallSensor...
08:24:35.140 INFO - Analysing /ibmshome/cc/cctlg/sonar/sonar/ens-14023/./.sonar/ATT_MO_API_TlgServer_ATT_TlgServer_module/jacoco-overall.exec
08:24:52.505 INFO - No information about coverage per test.
08:24:52.505 INFO - Sensor JaCoCoOverallSensor done: 17901 ms
08:24:52.505 INFO - Sensor CoberturaSensor...
08:24:52.506 WARN - Cobertura report not found at /ibmshome/ibms/ibms/target/site/cobertura/coverage.xml
08:24:52.506 INFO - Sensor CoberturaSensor done: 1 ms
08:24:52.506 INFO - Sensor JaCoCoSensor...
08:24:52.815 INFO - Analysing /ibmshome/ibms/ibms/ccirp/proj/sbmsIrd1000/jacoco/jacoco-ut.exec
08:25:04.966 INFO - No information about coverage per test.
08:25:04.966 INFO - Sensor JaCoCoSensor done: 12460 ms
我一直在寻找解决方案,也尝试过更改属性并添加 sonar.jacoco.itReportPath
作为虚拟对象,也得到了相同的结果。
您在 SonarQube 中看到了整体覆盖率,因为您可能拥有用于集成测试的小部件 enabled/set。您不可能在 UT 或 IT 测试中看到 0%,但总体上显示的是 0 以外的一些有效百分比。
根据您粘贴的快照,您似乎 不是 设置 sonar.tests=src/test/java 或 sonar.java.tests=some/test/java 即所有测试源代码所在的一些有效文件夹值。
为了获得覆盖率,请确保设置 sonar.jacoco.reportPath=full/relative/path/to/the/jacoco-ut-file.exec 并设置 sonar.sources、sonar.tests、sonar.jacoco.itReportPath= full/relative/path/to/jacoco-nonUT-actually-IT.exec 文件
注意:对于较新版本的 SonarQube,现在大多数属性的属性中都嵌入了 java/language 名称,即 sonar.binaries 现在可能是 sonar.java.binaries 或 sonar.groovy.binaries
请参阅设置 sonar.java.sources、sonar.java.tests、sonar.java.binaries、sonar.jacoco.reportPath,但这些设置会起作用,因为 sonar.jacoco.itReportPath 正确的值很有帮助!
此外,如果由于某种原因您在 SonarQube 中的项目损坏并且现在在每次评估后显示有效数据,请在新项目上尝试这些设置。
我使用的是SonarQube 4.5.4,SonarQube Runner 版本是2.4。
我已经在 sonar-project.properties
文件中定义了 sonar.jacoco.reportPath=jacoco/jacoco-ut.exec
(集成了 jacoco 作为覆盖工具的 junit4 ant 任务的结果)。
exec 文件看起来不错,它包含每个测试的所有覆盖信息,我用 EclEmma 2.3.2.201409141915 导入了它,所有覆盖信息都在那里。
在 SonarQube 仪表板中,它以一种奇怪的方式反映出来:
cevarage 被视为总体/IT 覆盖率,而不是 UT 覆盖率。并且缺少 UT 覆盖率,顺便说一下,重复率也设置为 0%(这不是真的) 从 Sonar 日志来看,它看起来像这样:
08:24:34.604 INFO - Sensor SurefireSensor done: 713 ms
08:24:34.604 INFO - Sensor JaCoCoOverallSensor...
08:24:35.140 INFO - Analysing /ibmshome/cc/cctlg/sonar/sonar/ens-14023/./.sonar/ATT_MO_API_TlgServer_ATT_TlgServer_module/jacoco-overall.exec
08:24:52.505 INFO - No information about coverage per test.
08:24:52.505 INFO - Sensor JaCoCoOverallSensor done: 17901 ms
08:24:52.505 INFO - Sensor CoberturaSensor...
08:24:52.506 WARN - Cobertura report not found at /ibmshome/ibms/ibms/target/site/cobertura/coverage.xml
08:24:52.506 INFO - Sensor CoberturaSensor done: 1 ms
08:24:52.506 INFO - Sensor JaCoCoSensor...
08:24:52.815 INFO - Analysing /ibmshome/ibms/ibms/ccirp/proj/sbmsIrd1000/jacoco/jacoco-ut.exec
08:25:04.966 INFO - No information about coverage per test.
08:25:04.966 INFO - Sensor JaCoCoSensor done: 12460 ms
我一直在寻找解决方案,也尝试过更改属性并添加 sonar.jacoco.itReportPath
作为虚拟对象,也得到了相同的结果。
您在 SonarQube 中看到了整体覆盖率,因为您可能拥有用于集成测试的小部件 enabled/set。您不可能在 UT 或 IT 测试中看到 0%,但总体上显示的是 0 以外的一些有效百分比。
根据您粘贴的快照,您似乎 不是 设置 sonar.tests=src/test/java 或 sonar.java.tests=some/test/java 即所有测试源代码所在的一些有效文件夹值。
为了获得覆盖率,请确保设置 sonar.jacoco.reportPath=full/relative/path/to/the/jacoco-ut-file.exec 并设置 sonar.sources、sonar.tests、sonar.jacoco.itReportPath= full/relative/path/to/jacoco-nonUT-actually-IT.exec 文件
注意:对于较新版本的 SonarQube,现在大多数属性的属性中都嵌入了 java/language 名称,即 sonar.binaries 现在可能是 sonar.java.binaries 或 sonar.groovy.binaries
请参阅设置 sonar.java.sources、sonar.java.tests、sonar.java.binaries、sonar.jacoco.reportPath,但这些设置会起作用,因为 sonar.jacoco.itReportPath 正确的值很有帮助!
此外,如果由于某种原因您在 SonarQube 中的项目损坏并且现在在每次评估后显示有效数据,请在新项目上尝试这些设置。