WebMvcTest 시 JPA auditing을 사용하고 있다면 @MockBean(JpaMetamodelMappingContext.class) 사용해주어야 한다.
아래와 같이 클래스에서 static class를 만들어 사용하는 방법이 있다. 단 이렇게 하는 경우 @Nested가 적용된 부분은 등록된 Bean을 인식하지 못한다.
@DataJpaTest
class TimetableRepositoryTest {
@TestConfiguration
static class TestConfig {
@Bean
JPAQueryFactory jpaQueryFactory(EntityManager em) {
return new JPAQueryFactory(em);
}
}
…
}
다른 방법도 있다. 아래와 같이 테스트용 Bean을 만드는 클래스를 따로 만들고 사용할 곳에 @Import(TestConfig.class)
를 적용하면 된다.
@TestConfiguration
public class TestConfig {
@PersistenceContext
EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
@DataJpaTest
@Import(TestConfig.class)
class Test { … }
보통 이러한 방식들은 모든 Bean을 container에 올리는 @SpringBootTest 보다는 @DataJpaTest와 같이 특정 영역과 관련된 일부 Bean만 올리는 상황에서 필요한 Bean을 추가적으로 등록하기 위해 사용된다.
/test/resources/application.yml
→ /main/resources/application.yml
@ActiveProfiles(“test”)
/test/resources/application-test.yml
→ /main/resources/application-test.yml