Mock Final Classes und Methoden mit Mockito

1. Übersicht

In diesem kurzen Artikel konzentrieren wir uns darauf, wie man letzte Klassen und Methoden verspottet - mit Mockito.

Wie bei anderen Artikeln, die sich auf das Mockito-Framework konzentrieren (wie Mockito Verify, Mockito When / Then und Mockitos Mock-Methoden), verwenden wir die unten gezeigte MyList- Klasse als Kollaborateur in Testfällen.

Wir werden eine neue Methode für dieses Tutorial hinzufügen:

public class MyList extends AbstractList { final public int finalMethod() { return 0; } }

Und wir werden es auch um eine letzte Unterklasse erweitern:

public final class FinalList extends MyList { @Override public int size() { return 1; } } 

2. Konfigurieren Sie Mockito für endgültige Methoden und Klassen

Bevor Mockito zum Verspotten endgültiger Klassen und Methoden verwendet werden kann, muss es konfiguriert werden.

Wir müssen eine Textdatei zum Verzeichnis src / test / resources / mockito-extensions des Projekts mit dem Namen org.mockito.plugins.MockMaker hinzufügen und eine einzelne Textzeile hinzufügen:

mock-maker-inline 

Mockito überprüft das Erweiterungsverzeichnis beim Laden auf Konfigurationsdateien. Diese Datei ermöglicht das Verspotten der endgültigen Methoden und Klassen.

3. Verspotten Sie eine endgültige Methode

Sobald Mockito richtig konfiguriert ist, kann eine endgültige Methode wie jede andere verspottet werden :

@Test public void whenMockFinalMethodMockWorks() { MyList myList = new MyList(); MyList mock = mock(MyList.class); when(mock.finalMethod()).thenReturn(1); assertNotEquals(mock.finalMethod(), myList.finalMethod()); } 

Durch Erstellen einer konkreten Instanz und einer Scheininstanz von MyList können wir die von beiden Versionen von finalMethod () zurückgegebenen Werte vergleichen und überprüfen, ob der Schein aufgerufen wird.

4. Verspotten Sie eine Abschlussklasse

Das Verspotten einer Abschlussklasse ist genauso einfach wie das Verspotten einer anderen Klasse:

@Test public void whenMockFinalClassMockWorks() { FinalList finalList = new FinalList(); FinalList mock = mock(FinalList.class); when(mock.size()).thenReturn(2); assertNotEquals(mock.size(), finalList.size()); } 

Ähnlich wie im obigen Test erstellen wir eine konkrete Instanz und eine Scheininstanz unserer letzten Klasse, verspotten eine Methode und überprüfen, ob sich die verspottete Instanz anders verhält.

5. Schlussfolgerung

In diesem kurzen Tutorial haben wir erklärt, wie Sie Abschlussklassen und -methoden mit Mockito mithilfe einer Mockito-Erweiterung verspotten.

Die vollständigen Beispiele finden Sie wie immer auf GitHub.