【问题标题】:Sonarqube bad coverage because of lombok @Data由于 lombok @Data,Sonarqube 覆盖率不佳
【发布时间】:2018-01-16 01:39:01
【问题描述】:

我使用 jacoco 进行报道。当我查看 jacoco 报告时,报道似乎很好。但是在 Sonarqube 中,覆盖率很低,因为它说来自 lombok 的 @Dataannotation 未被测试覆盖。

编译的类被标记为@Generated,但Sonar不会忽略它。

我怎样才能排除@Data的分析?

【问题讨论】:

标签: maven sonarqube jacoco lombok jacoco-maven-plugin


【解决方案1】:

tl;dr:我的建议是忽略整个课程。

理由:大多数数据类不包含“真实代码”。如果一个类仅由属性和 @Data 注释组成,那么您不会从覆盖中获得任何优势。如果你把逻辑放在类中,它可能不再是数据类了——想想 SRP。

也就是说,我曾经写过一个试图覆盖所有情况的数据类测试器。回想起来,这不值得麻烦。或许像 javabean-tester 这样的库也会有所帮助。

【讨论】:

    【解决方案2】:

    根据JaCoCo changelog - 从版本0.8.0 开始,带有注释@lombok.Generated 的方法会被自动过滤掉。

    变更日志还注明:

    直接读取 exec 文件并为此嵌入 JaCoCo 的工具(例如 SonarQube 或 Jenkins)只有在更新到该版本的 JaCoCo 后才会提供过滤功能。

    Announcement of release of JaCoCo version 0.8.0 状态:

    直接读取 exec 文件(不是最终报告)并嵌入 JaCoCo 以生成报告的工具只有在更新到此版本的 JaCoCo 后才会提供过滤功能。所以请关注/等待/等各个供应商,例如

    由我们作为 JaCoCo 项目的一部分开发的相应版本 (0.8.0) 集成生成的报告(Ant 任务、Maven 插件和命令行界面)提供过滤功能。

    截至今天(2018 年 1 月 30 日),https://jira.sonarsource.com/browse/SONARJAVA-2608 的修复应该在尚未发布的 SonarJava 插件版本 5.1 中。

    【讨论】:

      【解决方案3】:

      一般情况下,您不能只排除一两行,但是,您可以做一些其他的事情来获得 100% 的覆盖率。

      使用@Data 后您看到覆盖率急剧下降的原因是它包含很多注释,例如@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor 等. 并且声纳开始寻找所有这些方法,这些方法可能会或可能不会被您的 bean/pojo 使用。

      @Data注解详情-https://projectlombok.org/features/Data

      我只是假设,但是,如果您仅将 @Data 注释用于 getter 和 setter,请使用 @Getter@Setter 注释而不是 @Data,我相信您会看到您的覆盖范围。

      【讨论】:

        【解决方案4】:

        Godin's answer 是正确的,但现在有一种方法可以自动添加该注释。

        为此,您可以在项目的根目录中创建一个lombok.config 文件并在其中添加以下行:

        lombok.addLombokGeneratedAnnotation = true
        

        详细信息here。如文档中所述:

        Lombok 可以配置为在可能的情况下将@lombok.Generated 注释添加到所有生成的节点;对 JaCoCo(内置支持)或其他样式检查器和代码覆盖工具很有用: lombok.addLombokGeneratedAnnotation = true

        【讨论】:

          猜你喜欢
          • 2017-11-18
          • 2018-08-14
          • 2018-11-04
          • 2014-08-19
          • 2022-12-03
          • 2018-10-07
          • 1970-01-01
          • 2021-07-09
          • 2021-06-04
          相关资源
          最近更新 更多