Page tree
Skip to end of metadata
Go to start of metadata
Inhalt

Verweise

 

STATUS

Intro

Es lohnt sich die Original API zu lesen oder auch andere Artikel:

Mockito zum Projekt hinzufügen

Mockito - pom.xml  Expand source

Mocks erzeugen

Die beste Möglichkeit Mocks zu erzeugen ist die Annotation @Mock. Nachteil: Man braucht einen Runner, um die Annotation aufzulösen. Der Mock kann auch mit Mockito.mock() im Quelltext erzeugt werden. Um die statischen Mockito-Methoden direkt zu benutzen empfiehlt es sich Mockito statisch zu importieren: import static org.mockito.*;

Eclipse "organize import" würde diese Notation immer wieder auflösen, weil der Default-Wert, bei dem * erlaubt sind auf 99 gesetzt wurde. Ich habe den Default-Wert bei statischen Imports auf 1 gesetzt.

Mocks konfigurieren

Mocks werden über den when(...).thenReturn(...) call chain konfiguriert. Da Mockito eine fluent API bereitstellt, dann das auch rekursiv weiter geführt werden:

Es gibt  weitere call chain die benutzt werden können:

  • doReturn(...).when(...).methodCall (für Spys)
  • doThrow(...) when(...).methodCall (für void-Methoden oder Exception Simulation)
  • doAnswer(...)
  • doNothing(...)

Mocks verifizieren

Die verify() Methode kann genutzt werden um zu überprüfen, dass bestimmte Methoden einer Klasse aufgerufen wurden. Das ist besonders dann nützlich, wenn die Methode keinen direkten Seiteneffekt hat, der überprüft werden kann. Beispiel: Ein Service ruft ein DAO auf, um ein Model zu speichern. Der Seiteneffekt ist nur in der Datenbank sichtbar.

Spy

Was ist der Unterschied zwischen einem Mock und einem Spy: Der Mock hat keine eigene Implementierung. Über die verschiedenen Konfiguration-Chain muss das Verhalten der Methoden konfiguriert werden. Ein Spy nutzt die Implementierung der zu mockenden Klassen. Bestimmte Methoden können aber überschrieben werden.

Dependency Injection über Mockito

Um Spring Klassen zu testen gibt es einen separaten Runner für Spring. Braucht es zusätzlich Mocks bekommt man ein Problem, da man nicht zwei Runner konfigurieren kann. Es gibt zwei Möglichkeiten dieses zu umgehen:

  • Man arbeitet im Rules
  • Man lässt Mockito die Dependency Injection durchführen.

Rules nutzen

 

 

 

 

  • No labels