최근에는 계속 사용하던 SpringBoot도 병행하며 좀 더 깊게 공부한는 중이다. 이와중에 테스트 코드를 작성 하던 도중 문득 JUnit에 대해서도 깊게 알지 못한다고 느꼈다.또한 평소에 궁금했던점이 코틀린으로 프로젝트를 진행하면서 만난 이슈와 같은 문제라 공부 해봤다.
일반적으로 의존성 주입을 받을때 생성자,필드,세터 주입 이렇게 세가지가 있다.
주로 lombok @RequiredArgsConstructor를 이용해 final 타입 (필드의 생성자를 자동으로 만들어줌)을 통해 의존성 주입을 받는다. 이글은 의존성 주입에 관한 글이 아니기에 자세한 설명은 생략한다.
그런데 테스트 코드를 작성하면서 궁금한게 내가 기존에 하던 방식으로 의존성 주입을 하면 실패하고 @Autowired 를 사용해야 정상적으로 동작하게 된다. 왜 그럴까?
-> Junit5가 DI를 스스로 지원하기 때문
그래서 기존에 하던 lombok을 사용해 의존성을 주입하려 하면 Junit5가 먼저 개입을 해버린다.
-> 우리가 주로 사용하는것은 JUnit5 이므로 Jupiter를 사용한다고 보면된다.
- 스프링 프레임워크가 아닌 테스트 프레임워크임을 명심하자
- 따지고보면 스프링컨테이너가 아닌 JUpiter가 생성자 매개변수 담당자이다.
- @Autowired를 선언해줘야 JUpiter가 보고 스프링컨테이너에게 빈 주입을 요청한다