본문 바로가기
SpringBoot/테스트코드

JUnit5에서 의존성 주입은 @Autowired로 해야하는 이유

by devebucks 2020. 9. 10.
728x90

의존성을 주입받는 방식에는 4가지의 방법이 일반적으로 알려져 있습니다.

1. 생성자를 통해서 의존성을 주입

2. 필드를 통해서 의존성을 주입

3. setter를 통해서 의존성을 주입

4. lombok의 @RequiredArgsConstructor로 final이나 @NonNull의 필드를 의존성 주입

 

 

 저는 주로 lombok의 @RequiredArgsConstructor를 통해서 final타입의 필드를 통해서 의존성을 주입받는 방법을 사용하고 있었습니다.

그런데, JUnit5으로 단위테스트를 작성하면서 lombok의 방식으로 DI를 시도했으나 의존성 주입에서 에러가 발생했습니다. 생성자를 통해서 DI하는 것도 에러가 발생했습니다. 자세히 상황을 말하자면, MockMvc를 주입받으려고 하자 에러가 발생했습니다.

 

에러메시지는 다음과 같았습니다.

org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [final org.springframework.test.web.servlet.MockMvc mockMvc] in constructor [public com.zoo.account.AccountControllerTest(org.springframework.test.web.servlet.MockMvc)].

 

 에러가 발생하는 이유는 저도 강의를 들으면서 알게되었는데, JUnit5가 DI를 스스로 지원한다고 합니다. DI를 지원하는 타입이 정해져 있다고 합니다. JUnit5에서 생성자나 lombok방식으로 DI가 안되는 이유는 JUnit이 생성자에 다른 의존성을 주입하려고 먼저 개입을 하기 때문이라고...합니다.

즉, 단위테스트를 작성하면서 의존성을 주입받으려면 @Autowired를 사용해서 주입받아야 합니다.

728x90

댓글