스프링 사소한 것들

JPA metamodel must not be empty

notx2wice 2021. 10. 28. 08:20
@EnableJpaAuditing
@SpringBootApplication
public class MainApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyblogApplication.class, args);
    }
}

JPA는 Entity들의 생성 및 수정 LocalDateTime을 자동으로 관리해주는 Audting 기능이 있다. 해당 기능을 사용하기 위해 @EnableJpaAuditing을 추가했었는데, @SpringBootApplication 클래스에 등록해놓은 것이 에러의 원인이었다.

모든 테스트는 가장 기본이 되는 XXXApplication 클래스가 항상 로드되는데, @EnableJpaAuditing이 해당 클래스에 등록되어 있어서 모든 테스트들이 항상 JPA 관련 Bean들을 필요로 하고 있는 상태였다.

통합 테스트야 전체 컨텍스트를 로드하고 JPA를 포함한 모든 Bean들을 주입받기 때문에 에러가 발생하지 않았지만, @WebMvcTest같은 슬라이스 테스트는 JPA 관련 Bean들을 로드하지 않기 때문에 에러가 발생했다.

 

해결

@RunWith(SpringRunner.class)
@WebMvcTest(TargetController.java)
@MockBean(JpaMetamodelMappingContext.class)

테스트 클래스에 JpaMetamodelMappingContext를 MockBean으로 추가한다.

'스프링 사소한 것들' 카테고리의 다른 글

[Java] Lombok @Data 어노테이션  (0) 2021.10.28