You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lombok @Builder注解导致单元测试代码覆盖率为0的解决办法

解决Lombok @Builder导致IntelliJ代码覆盖率为0%的问题

问题根源

@Builder注解会自动生成一系列辅助代码:

  • 静态的builder()方法
  • 内部Builder类(包含属性的链式setter方法和build()方法)
  • 关联的构造逻辑

这些自动生成的代码默认会被IntelliJ的代码覆盖率工具纳入统计,但如果你的测试用例没有覆盖这些代码,就会拉低整个类的覆盖率,甚至显示为0%。

为什么lombok.config配置未生效?

你添加的lombok.addLombokGeneratedAnnotation = true配置需要满足几个前提才会生效:

  • Lombok版本必须≥1.16.16(该版本开始支持自动为生成代码添加@Generated注解)
  • lombok.config文件必须放在项目根目录或模块根目录(与pom.xml/gradle.build同级),否则Lombok无法读取到配置
  • IntelliJ可能需要清理缓存并重启,才能识别新的配置

解决方案

方案1:通过注解让IntelliJ忽略生成代码

  1. 确保lombok.config文件位置正确,内容如下:
    config.stopBubbling = true
    lombok.addLombokGeneratedAnnotation = true
    
  2. 检查项目依赖的Lombok版本,确保≥1.16.16
  3. 重启IntelliJ并清理缓存(路径:File -> Invalidate Caches...)
  4. 配置IntelliJ忽略带@Generated注解的代码:
    • 打开File -> Settings -> Build, Execution, Deployment -> Coverage
    • 在「Annotations to exclude from coverage」列表中添加以下注解:
      • lombok.Generated(Lombok自身的生成注解)
      • javax.annotation.Generated(旧版JDK的生成注解)
      • javax.annotation.processing.Generated(JDK9+的生成注解)

方案2:手动覆盖Builder相关代码

如果不想依赖注解忽略逻辑,可以在测试用例中显式调用Builder的所有方法,覆盖自动生成的代码:

@Test
public void testClassNameDTOBuilder() {
    // 调用builder方法,为所有属性赋值并执行build
    ClassNameDTO dto = ClassNameDTO.builder()
        // 示例:.username("test").age(25)
        .build();
    assertNotNull(dto);
    // 可额外断言属性值是否符合预期
}

这样测试会覆盖@Builder生成的所有代码,类的覆盖率就会恢复正常。

内容的提问来源于stack exchange,提问作者Dmitri Surname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:02:39