728x90
🚨오류
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!

 

✍️원인

jpaAuditing 기능을 사용하기 위해 @EnableJPaAuditing을 Application에 선언

Spring 테스트에서 컨테이너를 사용하는 경우, 기본 애플리케이션 클래스(@SpringBootApplication이 붙은 클래스)를 항상 로드

Application 클래스에 @EnableJpaAuditing이 설정되어 있어서, 모든 테스트에서 JPA 관련 빈(EntityManager, JpaRepository 등)이 필요하게 됨

통합 테스트(@SpringBootTest)는 JPA 관련 빈을 전부 로드하므로 문제 없지만, @WebMvcTest는 컨트롤러 관련 빈만 로드하므로 JPA 빈이 없어서 오류 발생함

 

 

 

✅해결

1. @MokitoBean 추가

@Test
@DisplayName("회원가입 성공 테스트")
@MockitoBean(JpaMetamodelMappingContext.class)
void createUserSuccessTest() throws Exception {}

각각의 Test에 @MokitoBean을 선언해야하는 번거러움 존재

 

2. JpaAuditingConfig 파일 분리

@EnableJpaAuditing
@Configuration
public class JpaAuditingConfig {

}

 

 

 

📚참고

https://velog.io/@suujeen/Error-creating-bean-with-name-jpaAuditingHandler

 

Error creating bean with name 'jpaAuditingHandler':

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor a...

velog.io

 

 

728x90