복붙노트

[SPRING] Mockito : 실제 개체를 전용 @Autowired 필드로 주입합니다.

SPRING

Mockito : 실제 개체를 전용 @Autowired 필드로 주입합니다.

나는 Mockito의 @Mock과 @InjectMocks 주석을 사용하여 Spring의 @Autowired 주석이있는 개인 필드에 종속성을 주입한다.

@RunWith(MockitoJUnitRunner.class)
public class DemoTest {
    @Mock
    private SomeService service;

    @InjectMocks
    private Demo demo;

    /* ... */
}

public class Demo {

    @Autowired
    private SomeService service;

    /* ... */
}

이제 개인용 @Autowired 필드에 실제 개체를 삽입하고 싶습니다 (설정자 없음). 이것이 가능한가 또는 Mock 주입에만 국한되는 메커니즘입니까?

해결법

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

    1.@Spy 주석 사용

    @Spy 주석 사용

    @RunWith(MockitoJUnitRunner.class)
    public class DemoTest {
        @Spy
        private SomeService service = new RealServiceImpl();
    
        @InjectMocks
        private Demo demo;
    
        /* ... */
    }
    

    Mockito는 @Mock 또는 @Spy 주석을 가진 모든 필드를 잠재적 인 후보로 간주하여 @InjectMocks 주석으로 주석 된 인스턴스에 주입합니다. 위의 경우 'RealServiceImpl'인스턴스가 'demo'에 주입됩니다.

    자세한 내용은 다음을 참조하십시오.

    모키토 - 집

    @스파이

    @모조품

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

    2.@Dev Blanked answer 외에도 Spring에서 만든 기존 bean을 사용하려는 경우 코드를 다음과 같이 수정할 수 있습니다.

    @Dev Blanked answer 외에도 Spring에서 만든 기존 bean을 사용하려는 경우 코드를 다음과 같이 수정할 수 있습니다.

    @RunWith(MockitoJUnitRunner.class)
    public class DemoTest {
    
        @Inject
        private ApplicationContext ctx;
    
        @Spy
        private SomeService service;
    
        @InjectMocks
        private Demo demo;
    
        @Before
        public void setUp(){
            service = ctx.getBean(SomeService.class);
        }
    
        /* ... */
    }
    

    이렇게하면 테스트가 작동하도록 코드를 변경 (다른 생성자 추가) 할 필요가 없습니다.

  3. from https://stackoverflow.com/questions/20270391/mockito-inject-real-objects-into-private-autowired-fields by cc-by-sa and MIT license