In Unit-Tests werden immer wieder sogenannte Mock-Objekte benötigt, um zum vereinfachte Versionen der Objekte zu haben, mit dem der Test-Kandidat kommuniziert. Diese müssen aber zum einen sinnvoll auf Methoden-Aufrufe reagieren, so dass der Test-Kandidat überhaupt funktionieren kann. Und zum anderen muss teilweise geprüft werden, ob der Test-Kandidat an diesen Objekten bestimmte Methoden mit bestimmten Parametern gerufen hat.
Mit Mockito sieht ein solcher Unit-Test z.B. wie folgt aus:
import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.mockito.Mockito.when; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Matchers.anyInt; class TestCase { // "Model" könnte ein Interface sein, // für das ein Mock-Objekt benötigt wird @Mock Model model; @Before public void before() { // bezieht sich auf obige(s) @Mock MockitoAnnotations.initMocks(this); @Test public void test() { // wenn model.getPeriod() gerufen wird, // soll der Mock 15 zurück liefern when(model.getPeriod()).thenReturn(15); // wenn model.getDelay() mit irgend einem // int-Paramter gerufen wird, // soll der Mock 1 zurück liefern when(model.getDelay(anyInt)).thenReturn(1); // wenn model.run(1) gerufen wird, // soll der Mock 20 zurück liefern when(model.run(1)).thenReturn(20); // der eigentliche Test new TestKandidat(model).run(22); // sollte mindestens einmal // mit irgendeinem Parameterwert // aufgerufen worden sein verify(model, atLeast(1)).setPeriod(anyInt()); // model.run(1) sollte genau einmal aufgerufen worden sein verify(model, times(1)).run(1); // mode.fail() sollte gar nicht aufgerufen worden sein verify(model, never()).fail(); }Ein Vergleich von EasyMock mit Mockito findet sich hier und eine ausführlichere Dokumentation zu Mockito findet sich hier. Mockito kann außerdem auch über Maven bezogen werden (ggf. auf neue Versionen achten):
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.8.0</version> </dependency>
Twitter
Facebook
Reddit
LinkedIn
StumbleUpon
Email