2013-06-20 1 views
25

Ho una classe che ha 2 metodi. Voglio prendere in giro la classe e poi prendere in giro il primo metodo, ma non il secondo.Mockito- call metodo reale

ad es.

class C { 
void m1() { ...} 
boolean m2() { ... return flag;} 
}  

unità codice di prova:

C cMock = Mockito.mock(C.class); 
Mockito.doNothing().when(cMock).m1(); 
Mockito.when(cMock.m2()).thenCallRealMethod(); 

La cosa strana è che m2 non viene chiamato.

mi manca qualcosa qui?

+1

è la tua attuale classe C non-finale? Inoltre, in alternativa, puoi creare una Spia invece di una Mock, e quindi devi solo fare 'doNothing()' per m1. –

+2

Puoi darci l'intero codice di prova dell'unità? Perché qui, è normale se non viene chiamato il m2. Stai solo dichiarando il comportamento dei mock. Ma nessun vero metodo viene chiamato. – LaurentG

+0

@Kevin. si è non-finale. Spia ha funzionato! –

risposta

4

mancava la chiamata a: cMock.m2();

35

Questo è anche il punto in cui è possibile utilizzare Mockito.spy. ti permette di fare schifose parziali su oggetti reali.

C cMock = Mockito.spy(new C()); 
Mockito.doNothing().when(cMock).m1();