-
[Junit5] JPA metamodel must not be empty!트러블 슈팅 2022. 11. 22. 21:06
Spring-Boot 환경에서 Junit5를 사용한 Controller 단위 테스트를 진행하는 도중, 다음과 같은 에러가 발생하였다.Caused by: java.lang.IllegalArgumentException: JPA metamodel must not be empty!
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: JPA metamodel must not be empty!원인
JPA에서 Entity의 생성, 수정에 관한 LocalDateTime을 자동으로 설정해주는 Auditing 기능을 사용하기 위해 @EnableJpaAuditing 어노테이션을 사용하였고 해당 어노테이션을 MainApplication에 등록한 것이 원인이였다.
Spring Context를 사용하는 테스트에서는 가장 기본이 되는 MainApplication 클래스가 항상 등록이 된다. 해당 클래스가 등록이 되는 과정에서 @EnableJpaAuditing이 같이 등록되어 있어서 테스트를 진행하는데 JPA 관련 Bean들이 필요했고, 해당 Bean들이 등록되어 있지 않아 오류가 발생한 것이였다.
해결 방법
@EnableJpaAuditing 어노테이션을 MainApplication에 등록하는 것이 아닌 별도의 설정 파일을 만들어서 등록한다.
[기존 코드]
@EnableJpaAuditing @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
[수정 코드]
@SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
@Configuration @EnableJpaAuditing public class JpaConfig { }
위와 같이 코드를 수정하면, 테스트는 정상적으로 수행된다.'트러블 슈팅' 카테고리의 다른 글
Kotest + 생성자 Bean 주입 (0) 2023.05.27 Kotlin + Spring DTO에서 NotNull 변수의 null Validation (0) 2023.05.18 [Junit5] org.mockito.exceptions.misusing.MissingMethodInvocationException (0) 2022.11.21 [Spring] Spring Security + Junit5 (0) 2022.11.15 [JPA] UnexpectedRollbackException (0) 2022.11.04