【问题标题】:How does SonarQube calculate coverage through JaCoCo?SonarQube 如何通过 JaCoCo 计算覆盖率?
【发布时间】:2019-08-04 13:50:54
【问题描述】:

JaCoCo 只输出 jacococ.exec,它是 Sonar 的输入。在那个文件中,似乎只有信息:

- Class name
- Total Class Probes
- Executed Class Probes

但是,SonarQube 不能仅仅依赖这些值,因为它需要告诉您哪些是未转换的确切行,因此 Sonar 正在对其自身进行分析。那么它是如何使用 Jacoco 报告的呢?为什么需要它?

【问题讨论】:

  • SonarQube 正在使用源代码和覆盖输出文件的组合。两者必须同步。另见here
  • 但是,如果它要在方法/行级别自行分析源代码,为什么还需要 jacoco 文件呢?

标签: sonarqube jacoco


【解决方案1】:

那么它是如何使用 Jacoco 报告的呢?为什么需要它?

SonarQube 本身并不/不知道您实际执行了哪些测试以及它们如何覆盖您的代码。为了获得这些信息,它依赖于第三方测试覆盖工具。在 Java 的情况下,它依赖于 JaCoCo 收集和提供的数据为explained in answer on similar question from you(JaCoCo 在exec 文件中收集执行信息,并在生成报告期间从class 文件中获取行号和其他信息),或者 SonarQube 可以依赖"generic format" 中的数据。

【讨论】:

  • 嗨戈丁!感谢您的友好回答。我想我明白了我误解的根源。在 Eclipse 中检查 jacoco.exec 文件(并将其打开为二进制文件)看起来只包含关于类的信息 + 探针计数,但没有关于行级别的信息。但是这个信息必须在那里,因为他们告诉我整个二进制文件是所有 jacoco 报告的来源。所以现在我看到所有信息都在那里,Sonar 可以完全依赖 jacoco.exec 来获取所有覆盖信息
  • Sonar 是否预计在不久的将来会使用 Jacoco 报告而不是 exec(我阅读了几个来源解释应该是这种情况)?
  • 您已经可以将 XML 文件导入 SonarQube,该文件由 JaCoCo Ant Tasks 或 JaCoCo Maven 插件生成 - 请参阅 github.com/SonarSource/sonar-jacoco Import of exec 文件很快就会被弃用 - jira.sonarsource.com/browse/MMF-1651
猜你喜欢
  • 2014-05-11
  • 2018-08-16
  • 2018-11-13
  • 2017-01-07
  • 2017-01-03
  • 2020-07-18
  • 2017-12-03
  • 2019-12-27
  • 2019-05-15
相关资源
最近更新 更多