injectmocks java spring mockito

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

Mockito-home

@Spy

@Mock