Ho una domanda sull'utilizzo di SpringJUnit4ClassRunner
. Per casi di Junits o Unit Test puro dovremmo utilizzare annotazioni basate su Spring come @Autowired
insieme a SpringJUnit4ClassRunner
o dovremmo utilizzare solo lo MockitoJUnitRunner
invece con l'annotazione @RunWith
nella parte superiore della classe Test?Utilizzo di MockitoJUnitRunner.class anziché SpringJUnit4ClassRunner.class
intendo sostituire
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-applicationContext.xml" })
con appena
@RunWith(MockitoJUnitRunner.class)
al vertice della classe. Per me funziona.
In Junits normalmente non effettuiamo chiamate esterne come le chiamate al DB o chiamate ad altri servizi Web. Dobbiamo prendere in giro queste chiamate esterne usando le annotazioni @Mock
su questi oggetti di servizio. E poi creare un oggetto reale della classe che stiamo testando e che dipende da questi mock. Possiamo quindi utilizzare @InjectMocks
sull'oggetto reale in modo che venga iniettato con gli oggetti derisi.
Esempio Service-A-> Calls-> Service-B-> Calls-> Service-C
Durante il test A dovremmo prendere in giro Servizio B & durante il test Service-B dovremmo prendere in giro Service-C.
Alcuni frammento di codice
@RunWith(MockitoJUnitRunner.class)
public class TestServiceA {
@Mock
B mockObj;
@InjectMocks
A realObj;
@Test
public void testServiceA() {
.....
.....
}
}
Quindi, mi sento per i casi di test di unità non dobbiamo affidiamo contenitore primavera di fornirci l'istanza della classe stiamo testando.
Si prega di dare i vostri suggerimenti.
Uso SpringJUnit4ClassRunner.class invece di MockitoJUnitRunner.class
Il test non contiene nulla che richiederebbe l'intervento di Spring, quindi ovviamente non ne hai bisogno. –
@SotiriosDelimanolis - Grazie per la risposta. Questo è in realtà un codice fittizio simile al codice del mio progetto. In realtà all'inizio aveva SpringJUnit4ClassRunner.class e ContextConfiguration ({"classpath: test-applicationContext.xml"}) all'inizio della classe e annotazioni Autowired su entrambi gli oggetti A & B. Non ci sono stati beffardi. Ho rimosso tutti loro. Quindi in pratica voglio sapere se questo beffardo è il modo corretto di fare i giunchi. Il framework di test Spring fornisce anche il supporto per gli oggetti derisori. Come mostrato qui sto usando la libreria di Mockito per deridere gli oggetti. – Ayaskant
Pensando anche in un altro modo - Abbiamo davvero bisogno delle librerie SpringJUnit4ClassRunner e Spring in Junits? – Ayaskant