当前位置: 首页 > 知识库问答 >
问题:

SonarQube报道遗漏了Jacoco报告中的部分内容

纪鸿禧
2023-03-14

当我使用Jacoco代理运行单元测试时,我的本地Jacoco报告和SonarQube上的覆盖范围之间有一些差异。这似乎只影响包含嵌套类的文件。本地生成的报告具有外部类和所有内部类的覆盖信息,但是SonarQube上的覆盖数据只包括内部类。

例如,福。java包含外部类Foo和内部类Bar和Baz。

我的本地报告显示,Foo班的教学覆盖率为26%,Foo班为46%。吧台,Foo类为0%。巴兹;Foo的整体教学覆盖率。java占30%。SonarQube覆盖页面为Foo提供了15%的线路覆盖率。JAVA我知道行覆盖率并不等于指令覆盖率,但我预计数字会更接近。进一步检查后,我注意到在Foo的基于文件的覆盖率视图中。在SonarQube上的java中,外部类Foo中的所有行都标记为“未被单元测试覆盖”,唯一标记为覆盖的行是Foo中的行。我期待的酒吧。这一差异弥补了Jacoco报告和SonarQube之间约15%的差距。我在本地扫描程序日志或服务器分析日志中没有看到任何异常。

我在本地运行的是JaCoCo 0.7.7.2016060606、Java 1.8.0_73版和sonar scanner 2.8。服务器正在运行Java版本1.8.0_66-b17、SonarQube版本5.6.3和SonarQube Java插件版本4.2.1.6971。

如果有任何建议,我将不胜感激,如果有帮助的话,我很乐意提供更多细节。

共有2个答案

黄意智
2023-03-14

事实证明,用于运行单元测试的类文件(也用于生成我的本地报告)不同于声纳扫描仪使用的类文件。这是因为在编译、单元测试和本地报告生成之后,bnd会运行在类文件上,并重写@Component类的类文件。因为声纳扫描仪是在bnd之后运行的,它会看到不同的类文件。我的问题似乎不是内部类和外部类,而是OSGi组件和非组件;类Foo是OSGi组件,而内部类不是。

当我在Jacoco代理使用的相同类文件上运行扫描器时,Foo的行覆盖率。SonarQube报告的java是27%(而不是15%),基于文件的覆盖率视图与我的本地报告相匹配。

鱼志诚
2023-03-14

将“说明书”与其他任何东西进行比较,就像比较苹果和橙子——它们并不代表同一件事。单行代码通常包含许多字节码指令。因此,期望“指令覆盖率”接近“行覆盖率”是错误的,例如:如果总共10行有100条指令,1行有20条指令,那么错过的指令占80%,而错过的指令占90%。

看见http://www.eclemma.org/jacoco/trunk/doc/counters.html关于JaCoCo提供的计数器。和http://docs.sonarqube.org/display/SONAR/Metric关于SonarQube显示内容的定义。说明仅在JaCoCo中提供。

如果您看到SonarQube显示的Foo.java中覆盖的行与JaCoCo显示的行之间的差异,则无法从您的问题中清楚看出。如果是,请提供截图。

 类似资料:
  • SonarQube不再显示我用jacoco分析的项目的测试覆盖率。似乎SonarQube有了更新(我发现新规则的日期是5月19日)。我还假设,从那时起,不再评估使用jacoco maven插件收集的测试覆盖率。我见过类似问题的老问题,但那是4年前的事了:JaCoCo SonarQube不兼容版本1007 我将POM更新到最新的插件版本0.8.4,但无济于事。有什么想法吗?我需要在哪里更改一些东西,

  • 我有一个多模块Maven项目,其中覆盖报告位于覆盖Java类之外的另一个模块中。将非空xml覆盖报告(带有覆盖信息)导入Sonarqube是成功的,但显示覆盖范围为0。 复制步骤: 签出以下github项目,并使用构建它。之后,存在一个聚合的xml报告,该报告位于中。您可以在其中以及相应的html-Report中看到覆盖率数据。 编辑:插件“JaCoco xml report importer”已

  • This document outlines security procedures and general policies for the Libra project. Note: As Libra Core is currently in the prototype stage and does not power a blockchain with a currency that has

  • 我配置了两个项目来使用最新的jacoco版本0.7.8和最新的Arquillian jacoco扩展(1.0.09Alpha)。它就像一个魔咒(适用于jenkins和sonar 6.2)!但我有一个更大的项目,当我只启动Arquillian IT测试时,我的war归档文件会被创建,并有所有的类和测试。好的,当我运行相同的测试时,它的代码覆盖率,Arquillian归档文件中不包含任何类,并且有以下

  • 问题内容: 我必须编写一个.sh来启动Jacoco覆盖的UI应用程序。退出时,必须生成一份jacoco报告。 我无法使用以下简单命令生成jacoco.exec: 命令的第一部分可以正常运行并启动程序,但是-javaagent选项不会生成报告,并且程序也不会启动。如果我发生语法错误,那是完全相同的行为。 我的命令出了什么问题? 其次,此命令创建一个.exec文件。如何在命令行中生成.html报告?

  • 我必须写一个. sh来启动一个覆盖了Jacoco的UI应用程序。退出时,必须生成一个jacoco报告。 我无法用这个简单的命令生成jacoco.exec: 命令的第一部分工作正常并启动程序,但是-javaagent选项不生成报告,程序也不启动。如果我犯了语法错误,这是完全相同的行为。 我的命令怎么了? 其次,此命令创建一个. exec文件。如何在命令行中生成. html报告?