Error
단위 테스트 코드 작성 중 아래와 같은 오류가 떴다.
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument; nested exception is 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!
Error 원인
이유를 알아보자.
@WebMvcTest(LoanRequestController::class)
internal class LoanRequestControllerTest {
...
결론부터 말하자면 @WebMvcTest 어노테이션이 JPA관련 어노테이션을 못 잡아주어 생기는 오류다.
@EnableJpaAuditing
@SpringBootApplication
@EnableJpaRepositories(basePackages = ["패키지주소"])
@EntityScan(basePackages = ["패키지주소"])
class ApiApplication
fun main(args: Array<String>) {
runApplication<ApiApplication>(*args)
}
기존에는 Application에 @EnableJpaAuditing 와 @EnableJpaRepositories 를 사용했기 때문에 main 서비스가 실행이 될 때 같이 JPA가 적용이 된다. 따로 설정을 하지 않았기 때문에 @WebMvcTest만의 단위테스트에서는 JPA관련 어노테이션을 잡아줄 수 없게된다.
@WebMvcTest 가 JPA관련 어노테이션을 잡아줄 수 있게 따로 설정이 필요하다.
해결하기
@SpringBootApplication
@EntityScan(basePackages = ["패키지주소"])
class ApiApplication
fun main(args: Array<String>) {
runApplication<ApiApplication>(*args)
}
결론
기존의 main서비스처럼 설정을 한군데에 모아서 하지말고 분리하는 것이 단위테스트에 도움이 된다.
'spring > spring' 카테고리의 다른 글
[Spring][스프링부트핵심가이드] 유효성 검사(Validation) (0) | 2024.02.26 |
---|---|
[Spring][Error][Kotlin][jpa] required a bean of type ... that could not be found. (0) | 2024.02.12 |
[Spring][Error][Swagger]documentationPluginsBootstrapper (0) | 2024.02.11 |
[스프링 부트 핵심 가이드] Logback 설정 (0) | 2024.02.01 |
[스프링 부트 핵심 가이드] HTTP 요청 메서드 받기 (0) | 2024.02.01 |