WebMvcTest를 사용하여 컨트롤러 테스트를 작성하던 도중 다음의 에러를 맞이했다.
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'javax.persistence.EntityManager' available
EntityManager
를 필요로 하는지 이것저것 찾아보니 에러의 원인이 두가지였다. WebMvcConfigurer
를 상속받는 AppConfig
에 EntityManager
를 필요로 하는 빈이 있기 때문이다. @WebMvcTest
가 스캔하는 대상에 WebMvcConfigurer
가 포함되어 있기 때문에 해당 빈을 분리해야 한다.@EnableJpaAuditing
이 @SpringBootApplication
와 함께 호출하였기 때문이다. Spring 컨테이너를 요구하는 테스트는 XXXApplication
클래스가 항상 로드된다. 하지만 @WebMvcTest
는 JPA 관련 빈을 로드하지 않기 때문에 @EnableJpaAuditing
에서 에러가 발생한다.@EnableJpaAuditing
과 EntityManger
를 필요로 하는 빈을 몰아 넣었다.