Icon TP 149

Testing with Mockito

Problem

Mockito ist, mit seinen Möglichkeiten Klassen zu mocken, ein sehr mächtiges Tool. Leider kommt auch Mockito mit seinen verify()-Methoden an seine Grenzen, wenn die equals()-Methoden der zu prüfenden Objekten nicht existieren oder fehlerbehaftet sind. Im Normalfall werden die Klassen einfach behoben und es hat sich erledigt. Im Falle von externen Klassen wird es nicht so einfach. Hier gibt es zum Beispiel nur die Möglichkeit, diese in eigene Klassen zu überführen, sehr gut in einem Wrapper zu verstecken oder gleich zu Kotlin zu wechseln.

Lösung

Eine brauchbare Lösung, um mit dem Test den Code vollständig abzudecken, ist die Verwendung von ArgumentCapture. Hiermit ist es möglich, die Instanzen beim verify() abzufangen und im späteren Zeitpunkt zu prüfen.

Beispiel

1 FuelPortion expectedFuelPortion = FuelPortion.DYNAMIC;
2
3 Engine myMockEngine = mock(Engine.class); //Or with @Mock
4 Car myTestCar = new Car(myMockEngine);
5
6 myTestCar.startEngine();
7
8 ArgumentCaptor<EngineConfiguration> engineConfigurationCapture = ArgumentCaptor.forClass(EngineConfiguration.class); //Or with @Captor
9 verify(myMockEngine).start(engineConfigurationCapture.capture()); // capture() is the central call for ArgumentCapture
10
11 EngineConfiguration actuelEngineConfiguration = engineConfigurationCapture.getValue();
12 Assert.assertEquals(expectedFuelPortion, actuelEngineConfiguration.getFuelPortion());
TP 149 Visual

Weiterführende Aspekte

---

Autor: Alexander Pöhlmann / Software Engineer / Standort Leipzig

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen