spring 테스트 코드 작성 중 Error creating bean with name ... Unsatisfied dependency expressed through field 에러

lsy·2022년 10월 23일

에러 발생


해당 테스트 코드를 작성하면서 repository(jpa)와 parsingMenuData라는 component를 필드 주입했는데, 해당 에러가 발생했다.

대략 parsingMenuData를 주입하려고 하는데 bean이 없다는 에러 같았다. 분명 Autowired를 했는데 왜 주입이 되지 않을까.....

원인

@DataJpaTest 어노테이션을 이용하면 jpa와 관련된 entity들과 EntityManager정도만 ApplicationContext에 bean으로 등록한다고 한다. 또한 Component Scan을 하지 않아서 @Component bean도 등록하지 않는다고 한다.

따라서 내가 만든 다른 bean들은 등록되지 않은 것이다.

해결 방법

자신이 원하는 것에 따라 다를 것 같다.

먼저, @DataJpaTest를 계속 이용해야 한다면 컨테이너에 등록되지 않은 bean에 @Autowired 대신 @Spybean 어노테이션을 사용하는 방법이 존재한다.

다른 방법은 꼭 @DataJpaTest를 이용하지 않아도 되는 테스트라면 해당 어노테이션 대신 실제 실행 환경과 동일하게 모든 설정과 bean을 ApplicationContext에 등록하는 @SpringBootTest를 사용하면 해결된다.

다만, 해당 어노테이션은 @Transactional이 존재하지 않기 때문에 각 메서드마다 해당 어노테이션을 달아줘야한다.

@Spybean과 @Mockbean에 대한 자세한 내용은

https://jojoldu.tistory.com/226

여기에 굉장히 잘 정리되어 있으니 참고하면 좋을 것 같다.


reference

https://da-nyee.github.io/posts/spring-springboottest-vs-datajpatest/

profile
server를 공부하고 있습니다.

0개의 댓글