Scheinunterricht und Methoden mit Mockito

Mock Final Classes und Methoden mit Mockito

1. Überblick

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

Wie bei anderen Artikeln, die sich auf das Mockito-Framework konzentrieren (wieMockito Verify,Mockito When/Then undMockito’s Mock Methods), verwenden wir die unten gezeigte KlasseMyList 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 die Unterklassefinalerweitern:

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 von finalen Klassen und Methoden verwendet werden kann, muss es konfiguriert werden.

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

mock-maker-inline

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

3. Verspotten Sie eine endgültige Methode

Once Mockito is properly configured, a final method can be mocked like any other:

@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 vonMyList können wir die von beiden Versionen vonfinalMethod() 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 stellen sicher, dass sich die verspottete Instanz anders verhält.

5. Fazit

In diesem kurzen Tutorial wurde erläutert, wie Sie mit Mockito Endklassen und Methoden verspotten, indem Sie eine Mockito-Erweiterung verwenden.

Die vollständigen Beispiele finden Sie wie immer inover on GitHub.