@InjectMocks
l'annotazione dice a Mockito di iniettare tutti i mock (oggetti annotati dall'annotazione @Mock
) nei campi dell'oggetto di test. Mockito usa Reflection per questo.
@Autowired
l'annotazione indica al framework Spring di iniettare il bean dal suo contenitore IoC. Spring usa anche la riflessione per questo quando si tratta di un'iniezione di campo privata. È persino possibile utilizzare anche l'annotazione @Inject
(parte delle specifiche Java EE) con lo stesso effetto.
Ma vorrei suggerire di esaminare i vantaggi di Constructor injection over Field injection. In tal caso non è necessario utilizzare lo @InjectMocks
perché è possibile trasferire i mock in oggetto di test tramite il costruttore. Non ci sarebbe stato bisogno di Reflection sotto il cofano nel tuo test né in produzione.
Se si desidera creare test di integrazione con sottoinsieme di bean Spring, suggerirei di dare un'occhiata all'annotazione @DirtiesContext
. Fa parte del modulo framework Spring comunemente chiamato "Spring Test".
+1 come non avevo sentito parlare di springockito che sembra bello e pulito. – dectarin
Springockito è davvero bello, non lo uso mai perché preferisco i test unitari. Tuttavia recentemente (qualche mese fa) ho sentito che springockito aveva alcuni bug. – Brice