我使用jacoco进行报道。当我查看jacoco报告时,报道似乎很好。但在Sonarqube中,覆盖率很低,因为它表示来自lombok的@Data
注释不是通过测试覆盖的。
编译的类标记为@Generated
,但Sonar不会忽略它。
如何排除分析@Data
?
答案 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,我相信您的覆盖范围将会有所增加。