由于 lombok @Data

问题描述 投票:0回答:5

我使用 jacoco 进行覆盖率报告。当我查看 jacoco 报告时,覆盖范围似乎不错。但在 Sonarqube 中,覆盖率很低,因为它说来自 lombok 的

@Data
注释未被测试覆盖。

编译的类被标记为

@Generated
但它不会被 Sonar 忽略。

如何排除分析中的

@Data

maven sonarqube jacoco lombok jacoco-maven-plugin
5个回答
33
投票

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

为此,您可以在项目的根目录中创建一个

lombok.config
文件并在其中添加以下行:

lombok.addLombokGeneratedAnnotation = true

完整详情此处。如文档中详述:

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


10
投票

根据 JaCoCo 变更日志 - 从版本 0.8.0 开始,带有注释

@lombok.Generated
的方法将被自动过滤掉。

变更日志还指出:

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

JaCoCo 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 中。


2
投票

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

使用

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

有关

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

我只是假设,但是,如果您仅对 getter 和 setter 使用

@Data
注释,那么请使用
@Getter
@Setter
注释而不是
@Data
,我相信您会看到覆盖范围有所提高。


0
投票

tl;dr:我的建议是忽略整个班级的报道。

理由:大多数数据类不包含“真实代码”。如果一个类仅由属性和

@Data
注释组成,那么您不会从覆盖范围中获得任何优势。如果你将逻辑放入类中,它可能不再是数据类 - 想想 SRP。

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


0
投票

最新版本的 Lombok (1.18.34) 还会自动向生成的代码添加 @Generate 注释。因此,使用最新版本的 JaCoCo 和 Lombok 将开箱即用,无需将 lombok 配置文件添加到项目中。

参见 https://projectlombok.org/changelog

© www.soinside.com 2019 - 2024. All rights reserved.