【问题标题】:SonarQube does not recognize some Lombok annotations - misleading test coverage results by JacocoSonarQube 无法识别一些 Lombok 注释 - Jacoco 的误导性测试覆盖率结果
【发布时间】:2016-03-27 12:59:39
【问题描述】:

SonarQube 支持部分 Lombok 注释(getter - setter 等)。但是,它仍然不支持@EqualsAndHashCode@ToString 方法。

我已经在 StackOverflow 和其他网站上尝试了所有答案。但是,它不适用于我的情况。

有什么方法可以说 SonarQube 或 Jacoco,不分析此注释或不将它们包含在测试覆盖率结果中,或者您对此问题的解决方案是什么?

【问题讨论】:

  • 目前还不是很清楚到底是什么问题:lombok 和 JaCoCo 有问题吗?或 SonarQube java 分析器提出的问题?还是两者都有?
  • @benzonico 我正在使用“mvn clean verify sonar:sonar”分析我的项目,并且在 SonarQube 单元测试覆盖率部分中,覆盖率的百分比低于应有的值,因为SonarQube 无法识别由 Lombok 生成的“EqualsAndHashCode”和“ToString”方法。我想从 SonarQube 单元测试覆盖结果中排除这些方法。
  • 我不确定我是否理解您的观点,但我认为您不能从 SonarQube 测试覆盖率分析中排除某个方法。不过,您可以排除课程。
  • @ThiagoPorciúncula 谢谢你的回答。如果可能的话,我想排除所有的 lombok 注释(或让他们分析)。
  • SonarQube 是否将 Lombok 注释作为您的测试未涵盖的代码? SonarQube 是否会引发与您正在使用的 Lombok 注释相关的问题?究竟是什么问题?

标签: java eclipse sonarqube lombok


【解决方案1】:

从 Jacoco 0.7.10 开始,现在可以通过在 lombok.config 中将标志 lombok.addLombokGeneratedAnnotation 设置为 true 来排除 Lombok 生成的代码。

更多关于http://www.rainerhahnekamp.com/ignoring-lombok-code-in-jacoco

【讨论】:

  • 嗨!我们遵循了指南,但在我们的情况下它不起作用。 Sonar 不断将 Lombok 代码报告为未经测试,从而降低了覆盖范围。我们使用的版本:SonarQube 6.4.0 |龙目岛 1.16.18 | Jacoco maven 插件 0.7.10-SNAPSHOT(我什至尝试过 Lombok 的 Edge 版本:1.16.19)。任何想法?谢谢!
  • 一旦 Jacoco 0.7.10 发布,Sonar 将不得不在内部更新他们的版本。有关该特定主题的更多信息:github.com/jacoco/jacoco/pull/513#issuecomment-293176354
  • 我尝试使用 jacoco 0.7.10-SNAPSHOT 但得到了相同的结果
【解决方案2】:

让我们将 SonarQube 排除在外,因为它只是揭示问题的工具。

JaCoCo 通过检测字节码来工作:这意味着它会在字节码的特定位置添加一些指令(探针),并查看在测试运行期间哪些探针被命中。

Lombok 在字节码级别生成方法。 然后,这些生成的方法由 JaCoCo 检测,并且不包含在您的测试中。

因此,您必须将 JaCoCo 配置为忽略这些方法,或者在 lombok 发挥其魔力之前检测类,或者为这些生成的方法编写测试。

【讨论】:

    【解决方案3】:

    您可以configure Lombok 在生成的代码上生成@SuppressFBWarnings。可能,您可以配置 JaCoCo 来监听该注释。不幸的是,@javax.annotation.Generated有留存源,所以这对你没有用。

    披露:我是 Lombok 开发人员

    【讨论】:

    • 自 Jacoco 0.7.10/0.8.0(请参阅rainerhahnekamp 的回答)以来,不再需要并且不应使用此解决方法。
    猜你喜欢
    • 2019-05-15
    • 2021-03-03
    • 2014-03-27
    • 2013-11-20
    • 2016-09-28
    • 2019-10-23
    • 2016-11-10
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多