java - injectmocks - Mockito: Inyecta objetos reales en campos privados @Autowired
mockito inject private field (2)
Estoy usando las anotaciones @Mock
y @InjectMocks
para inyectar dependencias en campos privados que están anotados con @Autowired
de Spring:
@RunWith(MockitoJUnitRunner.class)
public class DemoTest {
@Mock
private SomeService service;
@InjectMocks
private Demo demo;
/* ... */
}
y
public class Demo {
@Autowired
private SomeService service;
/* ... */
}
Ahora me gustaría también inyectar objetos reales en campos privados @Autowired
(sin setters). ¿Es posible o el mecanismo está limitado a inyectar Mocks solamente?
Además de la respuesta @Dev Blanked, si desea utilizar un bean existente creado por Spring, el código se puede modificar a:
@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);
}
/* ... */
}
De esta forma, no necesita cambiar su código (agregue otro constructor) solo para que las pruebas funcionen.
Use la anotación @Spy
@RunWith(MockitoJUnitRunner.class)
public class DemoTest {
@Spy
private SomeService service = new RealServiceImpl();
@InjectMocks
private Demo demo;
/* ... */
}
Mockito considerará todos los campos que @Mock
anotación @Mock
o @Spy
como posibles candidatos para ser inyectados en la instancia anotada con la anotación @InjectMocks
. En el caso anterior ''RealServiceImpl''
instancia ''RealServiceImpl''
se inyectará en la ''demo''
Para mas detalles refiérase