해당 테스트 코드를 작성하면서 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
여기에 굉장히 잘 정리되어 있으니 참고하면 좋을 것 같다.
https://da-nyee.github.io/posts/spring-springboottest-vs-datajpatest/