본문 바로가기
[IT]/SpringBoot

[Spring Boot] JPA metamodel must not be empty 에러

by dop 2021. 4. 16.

@WebMvcTest

Controller 단위테스트를 위해 @WebMvcTest 어노테이션을 이용해서 테스트하던 중 만난 오류.
단위테스트 코드를 처음 작성해보는지라 버전문제나 설정에 문제가 있는줄 알았지만, 문제는 부트스트랩 클래스에 있었다.

@SpringBootApplication
@EnableJpaAuditing //이게 문제의 원흉
public class RunApplication {
    public static void main(String[] args) {
        SpringApplication.run(RunApplication.class,args);
    }
    @Bean
    public AuditorAware<String> auditorProvider(){
        return ()-> Optional.of(UUID.randomUUID().toString());
    }
}

이전에 Base Entity를 설정하면서 생성시간을 자동으로 할당하기 위해 @EnableJpaAuditing을 추가했었는데, @SpringBootApplication 클래스에 등록해놓은 것이 에러의 원인이었다.
부트스트랩 클래스에 설정해놓는 바람에 모든 테스트들이 JPA 관련 Bean을 필요로 하는 상황이었다.
이전까지는 @SpringBootTest로 통합테스트만 진행해서 모든 Bean을 주입받아 별 문제없이 실행되었지만, 단위 테스트는 JPA관련 Bean은 주입받지 않기 때문에 문제가 발생햇다.

@Configuration
@EnableJpaAuditing
public class SpringConfig {
    EntityManager em ;
    public SpringConfig(EntityManager em) {
        this.em = em;
    }

}

위와같이 간단하게 Config 클래스를 만들어 @EnableJpaAuditing 를 옮겨주기로 했다.

@WebMvcTest(OrderController.class)
public class OrderControllerTest {

    @Autowired
    MockMvc mvc;

    @MockBean
    OrderService orderService;
    @MockBean
    UserService userService;

 //----중략---
728x90