들어가기 전

필자는 테스트 코드가 아닌 곳에서 @Autowired가 아닌 @RequiredArgsConstructor를 이용해서 의존성 주입을 편하게 하였습니다. 

그런데 필자가 테스트 코드에서도 @RequiredArgsConstructor를 사용하의존성 주입을 하려고 하는 데 사용을 할 수 없다고 나옵니다.

 

// 의존성 주입이 하나일 경우 Autowired를 생략 가능합니다.
// Autowired를 사용할 경우
@Controller
public class AutowiredController {
    @Autowired
    private TestService service;
    @AutoWired
    private TestRepository repository;
}

// RequiredArgsConstructor를 사용할 경우
@Controller
@RequiredArgsConstructor
public class RequiredArgsConstructorController {
    private final TestService service;
    private final TestRepository repository;
    }

 

사용할 수 없는 이유

테스트 코드가 아닌 곳에서는 스프링 컨테이너를 이용하여 빈을 가져와 자동 주입을 하여 @RequiredArgsConstructor도 되고 @Autowired도 사용이 가능합니다.

그러나 테스트 코드에서는 JUnit5 프레임워크를 사용하여 스프링 컨테이너가 아닌 JUnit5가 스스로 지원을 하게 됩니다. 그래서 의존성 주입의 타입이 정해져 있어 @Autowired만 사용이 가능합니다.

 

 

테스트 코드

@SpringBootTest
public class TestCode {
	
    @Autowired
    TestBean bean;
}

 

테스트 코드가 아닌 경우

@Controller
@RequiredArgsConstructor
public class TestController {
    private final TestService;
    private final TestRepository;
}

// 또는

@Controller
public class TestController {
    @Autowired
    private  TestService;
    @Autowired
    private TestRepository;
}