ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 {
    }

     


    위와 같이 코드를 수정하면, 테스트는 정상적으로 수행된다.



    댓글

Designed by Tistory.