由于lombok @Data,Sonarqube覆盖率不佳

时间:2017-08-08 13:00:49

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

我使用jacoco进行报道。当我查看jacoco报告时,报道似乎很好。但在Sonarqube中,覆盖率很低,因为它表示来自lombok的@Data注释不是通过测试覆盖的。

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

如何排除分析@Data

4 个答案:

答案 0 :(得分:6)

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

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

lombok.addLombokGeneratedAnnotation = true

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

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

答案 1 :(得分:0)

tl;博士:我的建议是忽略整个班级的覆盖范围。

基本原理:大多数数据类都不包含“真实代码”。如果一个类只包含属性和@Data注释,那么你就无法从覆盖范围中获益。如果你把逻辑放在课堂上,它可能不再是一个数据类 - 想想SRP。

那就是说,我曾经写过一个试图涵盖所有案例的数据类测试人员。回想起来,这不值得麻烦。也许像javabean-tester这样的图书馆也可能会有所帮助。

答案 2 :(得分:0)

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

更改日志还注意到:

  

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

Announcement of release of JaCoCo version 0.8.0州:

  

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

           

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

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

答案 3 :(得分:0)

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

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

有关@Data注释的详细信息-https://projectlombok.org/features/Data

我只是假设,但是,如果您仅将@Data批注用于吸气剂和设置器,则应使用@Getter和@Setter批注而不是@Data,我相信您的覆盖范围将会有所增加。