복붙노트

[SPRING] @injectMocks와 @Mockito의 @Autowired 사용법의 차이점은 무엇입니까?

SPRING

@injectMocks와 @Mockito의 @Autowired 사용법의 차이점은 무엇입니까?

Mockito와 Junit을 사용하여 테스트 케이스를 작성할 때 테스트 할 클래스에 @InjectMocks를 사용하고있었습니다. 프로젝트의 다른 부분에서는 @Autowired가 테스트 할 클래스에 사용되는 것을 볼 수 있습니다.

@InjectMocks 및 @Autowired는 언제 사용할 수 있습니까? 테스트 할 클래스와 함께 사용할 때 두 클래스의 차이점은 무엇입니까?

해결법

  1. ==============================

    1.@InjectMocks는 테스트 클래스의 선언 된 필드를 테스트중인 클래스의 일치하는 필드에 주입하는 Mockito 메커니즘입니다. 테스트 대상 클래스가 Spring 구성 요소 일 필요는 없습니다.

    @InjectMocks는 테스트 클래스의 선언 된 필드를 테스트중인 클래스의 일치하는 필드에 주입하는 Mockito 메커니즘입니다. 테스트 대상 클래스가 Spring 구성 요소 일 필요는 없습니다.

    @Autowired는 bean을 프로덕션, 테스트 클래스가 아닌 클래스로 autowiring하는 Spring의 주석이다.

    테스트중인 클래스에서 @Autowired 어노테이션을 활용하려면 Springockito를 사용하는 것이 좋습니다.이 방법을 사용하면 모의 bean을 선언하여 Spring이 bean을 autowire하는 것과 같은 방식으로 테스트중인 클래스에 autowired가 될 수 있습니다. 그러나 일반적으로 그럴 필요는 없습니다.

  2. ==============================

    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 프레임 워크 모듈의 일부입니다.

  3. from https://stackoverflow.com/questions/25893247/difference-between-injectmocks-and-autowired-usage-in-mockito by cc-by-sa and MIT license