改进Lombok @Data代码覆盖率

Var*_*rma 8 java eclipse unit-testing code-coverage eclemma

我正在为我的项目编写单元测试,并尝试实现至少80%的代码覆盖率.问题是,我使用的龙目岛的@Data注解产生getter和setter,当我跑我的单元测试,所有的getter和setter方法与其他方法,如沿toString,equals,hashcode等错过,我的代码覆盖需要一个打击.有没有解决方法呢?我一直在搜索这个问题,但一直找不到任何有用的东西.任何有关这方面的帮助将不胜感激.

我正在使用Eclemma进行代码覆盖分析.

ahm*_*tin 41

首先,@Data注释是组合 @ToString@EqualsAndHashCode@Getter@Setter

如果您只需要 Lombok 自动创建 getter 和 setter,则只能使用@Getter@Setter批注而不是@Data

此外,为了将 Lombok 创建的方法保留在此范围之外,您可以在根目录中创建一个lombok.config文件并包含以下两行:

config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)

添加此行后,当您转到Sonar 时,您会看到这些类被100%覆盖。


mla*_*dzo 28

0.8.0版本中,Jacoco增加了对过滤掉@lombok.Generated报告中注释的所有方法的支持.您需要更改的唯一内容是lombok.config使用以下设置添加到项目的根目录:

config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)
  • config.stopBubbling = true 告诉Lombok这是你的根目录,它不应搜索父目录以获取更多配置文件(你可以在不同的目录/包中有多个lombok配置文件).
  • lombok.addLombokGeneratedAnnotation = true 将@lombok.Generated注释添加到所有Lombok生成的方法中.

就是这样.Jacoco将过滤Lombok自动生成的方法,如果您尽力,您的代码覆盖率可能接近100%:))

  • 这有效,这实际上从三叶草测试覆盖范围中排除了 lombok getter 和 setter (2认同)

Chr*_*s K 7

当需要 equals 和 hashcode 时,可以使用EqualsVerifier对它们进行非常彻底的单元测试。EqualsVerifier 是一个开源 JUnit 库,它为 equals 和 hashCode 合约的所有部分生成单元测试,即使手动编写测试也无法直接实现。

用法示例:

@Test
public void equalsContract() {
    EqualsVerifier.forClass( MyAwesomeLombokedDataClass.class )
        .suppress( Warning.STRICT_INHERITANCE )
        .verify();
}
Run Code Online (Sandbox Code Playgroud)


小智 5

在根级别创建一个 lombok.config 文件并添加此代码

config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)

会被代码覆盖率忽略