[SPRING] Mockito : 실제 개체를 전용 @Autowired 필드로 주입합니다.
SPRINGMockito : 실제 개체를 전용 @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.@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.@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); } /* ... */ }
이렇게하면 테스트가 작동하도록 코드를 변경 (다른 생성자 추가) 할 필요가 없습니다.
from https://stackoverflow.com/questions/20270391/mockito-inject-real-objects-into-private-autowired-fields by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 주석으로 봄 mvc 3 헤더 없음 캐시를 설정하는 방법 (0) | 2018.12.17 |
---|---|
[SPRING] Spring 3.1, Hibernate 4, SessionFactory (0) | 2018.12.17 |
[SPRING] property-placeholder에 의해 생성 된 속성에 대한 프로그래밍 방식의 액세스 (0) | 2018.12.16 |
[SPRING] Spring의 "자동 프록시를 사용할 수 없음"원인 추적 (0) | 2018.12.16 |
[SPRING] 내 웹 애플리케이션에 (스프링 보안을 통해) 로그인 한 모든 사용자 목록을 어떻게 표시 할 수 있습니까? (0) | 2018.12.16 |