[SPRING] @injectMocks와 @Mockito의 @Autowired 사용법의 차이점은 무엇입니까?
SPRING@injectMocks와 @Mockito의 @Autowired 사용법의 차이점은 무엇입니까?
Mockito와 Junit을 사용하여 테스트 케이스를 작성할 때 테스트 할 클래스에 @InjectMocks를 사용하고있었습니다. 프로젝트의 다른 부분에서는 @Autowired가 테스트 할 클래스에 사용되는 것을 볼 수 있습니다.
@InjectMocks 및 @Autowired는 언제 사용할 수 있습니까? 테스트 할 클래스와 함께 사용할 때 두 클래스의 차이점은 무엇입니까?
해결법
-
==============================
1.@InjectMocks는 테스트 클래스의 선언 된 필드를 테스트중인 클래스의 일치하는 필드에 주입하는 Mockito 메커니즘입니다. 테스트 대상 클래스가 Spring 구성 요소 일 필요는 없습니다.
@InjectMocks는 테스트 클래스의 선언 된 필드를 테스트중인 클래스의 일치하는 필드에 주입하는 Mockito 메커니즘입니다. 테스트 대상 클래스가 Spring 구성 요소 일 필요는 없습니다.
@Autowired는 bean을 프로덕션, 테스트 클래스가 아닌 클래스로 autowiring하는 Spring의 주석이다.
테스트중인 클래스에서 @Autowired 어노테이션을 활용하려면 Springockito를 사용하는 것이 좋습니다.이 방법을 사용하면 모의 bean을 선언하여 Spring이 bean을 autowire하는 것과 같은 방식으로 테스트중인 클래스에 autowired가 될 수 있습니다. 그러나 일반적으로 그럴 필요는 없습니다.
-
==============================
2.@InjectMocks 어노테이션은 모든 모의 객체 (@Mock 어노테이션으로 주석 처리 된 객체)를 테스트 객체의 필드에 주입하도록 Mockito에게 알려줍니다. Mockito는 Reflection을 사용합니다.
@InjectMocks 어노테이션은 모든 모의 객체 (@Mock 어노테이션으로 주석 처리 된 객체)를 테스트 객체의 필드에 주입하도록 Mockito에게 알려줍니다. Mockito는 Reflection을 사용합니다.
@Autowired 어노테이션은 IoC 컨테이너로부터 빈을 삽입하기 위해 스프링 프레임 워크에게 알려준다. Spring은 private field injection 일 때 이것을 위해 리플렉션을 사용합니다. 심지어 @Inject 주석 (Java EE 스펙의 일부)을 사용해도 동일한 효과를 낼 수 있습니다.
그러나 필드 주입보다 생성자 주입의 이점을 살펴볼 것을 제안합니다. 이 경우 생성자를 통해 테스트 객체에 mock을 전달할 수 있으므로 @InjectMocks를 전혀 사용할 필요가 없습니다. 테스트 중이거나 생산 중일 때 반사가 필요하지 않습니다.
Spring 빈의 하위 세트로 통합 테스트를 만들고 싶다면 @DirtiesContext 주석을 살펴 보는 것이 좋습니다. 이것은 일반적으로 "Spring Test"라고 불리는 Spring 프레임 워크 모듈의 일부입니다.
from https://stackoverflow.com/questions/25893247/difference-between-injectmocks-and-autowired-usage-in-mockito by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 정적 와이어 스프링 클래스 (0) | 2019.03.28 |
---|---|
[SPRING] 비 스프링 컨텍스트에서로드 된 스프링 빈 확인 (0) | 2019.03.28 |
[SPRING] 이 스프링 MVC 컨트롤러에서 오류 상태 및 유효성 검사 오류를 반환하는 방법은 무엇입니까? (0) | 2019.03.28 |
[SPRING] ssl을 사용하는 Spring 5 WebClient (0) | 2019.03.28 |
[SPRING] MySQL 용 Spring Batch 3 업그레이드 스크립트가 있습니까? (0) | 2019.03.28 |