-
Notifications
You must be signed in to change notification settings - Fork 0
Porównanie Framework'ów Testowych Mockito oraz EasyMock
import static org.easymock.classextension.EasyMock.*;
List mock = createNiceMock(List.class);
expect(mock.get(0)).andStubReturn("one");
expect(mock.get(1)).andStubReturn("two");
mock.clear();
replay(mock);
someCodeThatInteractsWithMock();
verify(mock); import static org.mockito.Mockito.*;
List mock = mock(List.class);
when(mock.get(0)).thenReturn("one");
when(mock.get(1)).thenReturn("two");
someCodeThatInteractsWithMock();
verify(mock).clear(); Mockito ma fajną funkcję zwaną szpiegowaniem. Tworzysz rzeczywisty obiekt (nie makietę) i szpiegujesz go. Zasadniczo oznacza to, że obiekt będzie się zachowywał normalnie, ale wszystkie wywołania metod będą rejestrowane, co pozwoli na ich późniejszą weryfikację. Oto przykład:
List list = new LinkedList(); // real object
List spy = spy(list); // spy wrapper
//optionally, you can stub out some methods:
when(spy.size()).thenReturn(100);
//this method call is spied
spy.add("one");
// since a real add was done, get(0) will return "one"
assertEquals("one", spy.get(0));
//size() method was stubbed and to return 100
assertEquals(100, spy.size());
//optionally, you can verify that add was called as expected
verify(spy).add("one");W EasyMock nie ma szpiegowania jako takiego. Próbowałem jednak pomyśleć o przypadkach użycia i doszedłem do wniosku, że używając podzbioru funkcji przechwytywania EasyMock, częściowego mockowania i delegowania, powinienem być w stanie objąć je wszystkie. Może to być jednak bardziej uciążliwe. Ale myślę, że takie przypadki użycia są dość rzadkie. Nie jestem przeciwny dodawaniu funkcji szpiegowskiej, jeśli nie okaże się to błędne.
Jeśli chodzi o powyższy przykład, musimy pomyśleć o celu tego testu. Powiedzmy, że w tym przypadku mamy jakiś stary kod, dla którego chcemy się upewnić, że metoda add jest wywoływana z odpowiednim parametrem, ale chcemy zachować jej zwykłe zachowanie. Jest to dość rzadkie, ale może się zdarzyć. Możemy to zrobić w ten sposób:
// Real object
List real = new LinkedList();
// create the mock
List list = createMock(List.class);
// spy the parameter and perform the normal behavior
Capture c = new Capture();
expect(list.add(capture(c))).andDelegateTo(real);
replayAll();
// the actual test
list.add("one");
// get will return what was expected
assertEquals("one", real.get(0));
// check the capture (will throw an error if nothing was captured)
assertEquals("one", c.getValue());
// this is unnecessary since checking the capture is enough
verifyAll();-
Etap 1
-
Etap 2
-
Etap 3
-
Etap 4
-
Etap 5
-
Etap 6
-
Etap 7