2015-06-28 13 views
9

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

+0

Il test non contiene nulla che richiederebbe l'intervento di Spring, quindi ovviamente non ne hai bisogno. –

+0

@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

+0

Pensando anche in un altro modo - Abbiamo davvero bisogno delle librerie SpringJUnit4ClassRunner e Spring in Junits? – Ayaskant

risposta

-2

per i test unitari non abbiamo bisogno di Primavera, ma hanno bisogno di creare un'istanza di una parte del contesto primavera per i test di integrazione, beffardo strato/integrazione di accesso ai dati. È possibile utilizzare TestNG anziché JUnit e utilizzare uno di questi framework come cablaggio per l'integrazione e anche per i test di integrazione del sistema.

Problemi correlati