弹簧控制器单元测试

时间:2021-05-28 07:01:24

标签: spring-boot unit-testing spring-data-jpa controller junit5

我使用的是 Spring Boot、Spring Data JPA 和 JUnit 5。

实体中的所有 ID 均由 DB (@GeneratedValue) 自动生成。

因此所有实体都不包含任何用于初始化 ID 的 constructorssetter methods

当我为控制器 (@WebMvcTest) 实施单元测试时, 实体的所有 ID 都是 null

问题是一些端点响应id,所以当我为它们实现单元测试时,它们响应null,即测试失败。

如何为响应 DB 生成的 ID 的控制器实施单元测试?

1 个答案:

答案 0 :(得分:1)

您可以在类中添加 Getter 方法,然后使用 ObjectMapper 设置 id 字段。

Employee employee = new ObjectMapper().readValue(""{\"id\": \"1\"}", Employee.class);

其他方法是在 JUnit 中使用反射来设置该字段。

    Employee employee = new Employee();

    Field field = Employee.class.getDeclaredField("id");
    field.setAccessible(true);
    field.set(employee, "1");

其他使用反射的方法:Access a private field for a junit test