2013-06-20 11 views
25

Mam klasę, która ma 2 metody. Chcę kpić z klasy, a następnie kpić z pierwszej metody, ale nie z drugiej.Mockito- calling real method

np.

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

jednostka kodu testu:

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

Najdziwniejsze jest to, że nie jest m2 nazywa.

Czy tęsknię za czymkolwiek tutaj?

+1

- Twoja aktualna klasa C nie jest ostateczna? Jako alternatywę możesz stworzyć Szpiega zamiast Makiety, a następnie musisz tylko wykonać polecenie 'doNothing()' dla m1. –

+2

Czy możesz podać kod testowy całej jednostki? Ponieważ tutaj jest to normalne, jeśli m2 nie jest wywoływane. Twoje są po prostu deklarujące zachowanie mocków. Ale żadna prawdziwa metoda nie zostaje wywołana. – LaurentG

+0

@Kevin. tak, nie jest ostateczny. Szpieg działał! –

Odpowiedz

4

brakowało połączenia z: cMock.m2();

35

Jest to również miejsce, w którym można użyć Mockito.spy. pozwala na wykonywanie częściowych prób na prawdziwych obiektach.

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