[IT]/SpringBoot
[Spring Boot] JPA metamodel must not be empty 에러
dop
2021. 4. 16. 17:06
@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