Mockito: Inietta oggetti reali in campi privati ​​@Autowired

Sto usando le annotazioni @Mock e @InjectMocks per iniettare dipendenze in campi privati ​​che sono annotati con Spring’s @Autowired :

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

e

 public class Demo { @Autowired private SomeService service; /* ... */ } 

Ora vorrei anche iniettare oggetti reali in campi privati @Autowired (senza setter). È ansible o il meccanismo è limitato all’iniezione di Mock solo?

Usa @Spy annotazione @Spy

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

Mockito considererà tutti i campi con annotazione @Mock o @Spy come potenziali candidati da inserire nell’istanza annotata con @InjectMocks annotazione @InjectMocks . Nel caso precedente l’istanza 'RealServiceImpl' verrà iniettata nella ‘demo’

Per maggiori dettagli fare riferimento

Mockito-casa

@Spiare

@Mock

In aggiunta alla risposta @Dev Blanked, se si desidera utilizzare un bean esistente creato da Spring, il codice può essere modificato in:

 @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); } /* ... */ } 

In questo modo non è necessario modificare il codice (aggiungere un altro costruttore) solo per far funzionare i test.