boxmoe_header_banner_img

Hello! 欢迎来到悠悠畅享网!

文章导读

解决 Lombok 在测试类中失效的问题


avatar
作者 2025年9月3日 9

解决 Lombok 在测试类中失效的问题

Lombok 是一款流行的 Java 库,它通过注解自动生成样板代码,例如 getter、setter、构造函数等,从而简化了 Java 开发。然而,在 spring Boot 项目中,有时会遇到 Lombok 在测试类中失效的问题,导致无法访问实体类的 Lombok 特性。本文将详细介绍如何解决这个问题。

正如前文所述,解决 Lombok 在测试类中失效问题的关键在于确保 Lombok 依赖在测试 classpath 中可用。默认情况下,maven 可能不会将 optional 的 Lombok 依赖包含在测试 classpath 中。要解决这个问题,需要修改 pom.xml 文件,将 Lombok 依赖的作用域设置为 provided。

修改 pom.xml 文件

在 pom.xml 文件中,找到 Lombok 的依赖项:

<dependency>     <groupId>org.projectlombok</groupId>     <artifactId>lombok</artifactId>     <optional>true</optional> </dependency>

将 optional 属性移除,并添加 <scope>provided</scope>:

<dependency>     <groupId>org.projectlombok</groupId>     <artifactId>lombok</artifactId>     <scope>provided</scope> </dependency>

provided 作用域意味着该依赖项在编译和测试时可用,但在运行时由容器提供。对于 Lombok 来说,这意味着在编译和测试期间,Lombok 可以生成代码,但在运行时不需要包含 Lombok 库。

完整示例

以下是一个完整的 pom.xml 文件片段,展示了如何正确配置 Lombok 依赖:

<dependencies>     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-data-jpa</artifactId>     </dependency>     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>     </dependency>      <dependency>         <groupId>com.mysql</groupId>         <artifactId>mysql-connector-j</artifactId>         <scope>runtime</scope>     </dependency>      <dependency>         <groupId>org.projectlombok</groupId>         <artifactId>lombok</artifactId>         <scope>provided</scope>     </dependency>     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-test</artifactId>         <scope>test</scope>     </dependency> </dependencies>  <build>     <plugins>         <plugin>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-maven-plugin</artifactId>             <configuration>                 <excludes>                     <exclude>                         <groupId>org.projectlombok</groupId>                         <artifactId>lombok</artifactId>                     </exclude>                 </excludes>             </configuration>         </plugin>     </plugins> </build>

注意事项

  • 确保你的 IDE (例如 IntelliJ ideaeclipse) 安装了 Lombok 插件,以便正确处理 Lombok 注解。
  • 修改 pom.xml 文件后,需要重新构建项目,以便使更改生效。在 intellij idea 中,可以点击 “Maven” 工具窗口中的 “Reimport All Maven Projects” 按钮。
  • excludes 标签通常与 optional=true 一起使用,以防止 Lombok 打包到最终的可执行文件中。如果将 Lombok 设置为 provided 作用域,通常不需要 excludes 标签。

验证

修改 pom.xml 文件并重新构建项目后,你就可以在测试类中使用 Lombok 生成的 getter/setter 方法和构建器了。例如:

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*;  public class StudentTest {      @Test     public void testStudentBuilder() {         Student student = Student.builder()                 .firstName("John")                 .lastName("Doe")                 .emailId("john.doe@example.com")                 .build();          assertEquals("John", student.getFirstName());         assertEquals("Doe", student.getLastName());         assertEquals("john.doe@example.com", student.getEmailId());     } }

如果测试通过,则说明 Lombok 在测试环境中已成功启用。

总结

通过将 Lombok 依赖的作用域设置为 provided,可以解决 Lombok 在 spring boot 项目的测试类中失效的问题。确保你的 IDE 安装了 Lombok 插件,并重新构建项目以使更改生效。这样,你就可以在测试类中充分利用 Lombok 提供的便利功能,从而提高开发效率。



评论(已关闭)

评论已关闭