DataJpaTest 에서 Bean을 못찾는다

태그
Spring
개발하다 뭐가 안되는

노트

  • DataJpaTest 어노테이션은 일반적으로 Spring에서 영속성 레이어를 테스트 할 때 사용하는 어노테이션이다.
    • 한 가지 주의해야할 사항이 있다. DataJpaTest 는 SpringBootTest 와 달리 ApplicationContext를 가져오지 않는다. 이에 대한 설명을 다음과 같이 찾아볼 수 있다.
    • Annotation for a JPA test that focuses only on JPA components. Using this annotation will disable full auto-configuration and instead apply only configuration relevant to JPA tests.
    • 따라서 JPARepository, CRUDRepository 를 상속받는 Repository 인터페이스는 자동적으로 설정하지 않아도 쓸 수 있다.
    • @DataJpaTest class QueryTest @Autowired constructor( private val repository: QueryRepository, )
    • 그러나, 여기서 만약 JPA가 아닌 컴포넌트(예를 들어, QueryDSL과 같은)라던가, 부득이하게 서비스 컴포넌트를 DataJPATest 에서도 필요로 하여 가져와야 하는 경우가 있다.
    • @DataJpaTest class QueryTest @Autowired constructor( private val repository: QueryRepository, private val myWorkQueryRepository: MyWorkQueryRepositoryImpl, )
    • 그러면 에러가 뜨게 되는데, 이유인 즉, 해당 컴포넌트를 주입 받을 수 없다는 뜻으로 뜬다. 그야 당연히 JPA 관련 컴포넌트가 아니니까.
    • 따라서, 이럴 때는 직접 Test Configuration을 만들어주거나 @Import 어노테이션을 사용해야한다.

요약

📌
요약: Test Configuration을 만들어주거나 @Import 어노테이션 사용하기