Heim >Java >javaLernprogramm >Wie kann ich mit Mockito Abschlussklassen in Java simulieren?

Wie kann ich mit Mockito Abschlussklassen in Java simulieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-09 21:38:11993Durchsuche

How Can I Mock Final Classes in Java Using Mockito?

Endgültige Klassen mit Mockito verspotten

Im Bereich des Java-Testens ist das Verspotten nicht endgültiger Klassen eine gängige Praxis, um Abhängigkeiten zu isolieren und zu testen Code in einer kontrollierten Umgebung. Abschlussklassen stellen jedoch eine besondere Herausforderung dar, wenn es um das Verspotten geht.

Betrachten wir zum Beispiel das folgende Beispiel:

public final class RainOnTrees {
   public void startRain() {}
}

public class Seasons {
   RainOnTrees rain = new RainOnTrees();
   public void findSeasonAndRain() {rain.startRain();}
}

In diesem Szenario haben wir eine Abschlussklasse namens RainOnTrees und eine Klasse Jahreszeiten, die davon abhängt. Um Seasons effektiv zu testen, müssen wir RainOnTrees verspotten. Allerdings ist das Verspotten von Abschlussklassen mit Mockito Version 1 grundsätzlich nicht möglich.

Mockito Inline zur Rettung

Um diese Einschränkung zu überwinden, führte Mockito Version 2 das Mockito-Inline ein Paket, das das Verspotten statischer und endgültiger Klassen, einschließlich Konstruktoren, ermöglicht. Um diese Funktion zu nutzen, fügen Sie die folgende Abhängigkeit zu Ihrer Gradle-Datei hinzu:

testImplementation 'org.mockito:mockito-inline:2.13.0'

Mocking mit Mockito Inline

Sobald das Mockito-Inline-Paket hinzugefügt wurde, ist Mockito endgültig Der Unterricht wird unkompliziert:

@ExtendWith(MockitoExtension.class)
public class SeasonsTest {
    @Mock
    RainOnTrees rainMock;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testFindSeasonAndRain() {
        Seasons seasons = new Seasons();
        // Inject the mock into the Seasons class
        ReflectionTestUtils.setField(seasons, "rain", rainMock);

        seasons.findSeasonAndRain();

        // Verify that the mocked method was called
        Mockito.verify(rainMock).startRain();
    }
}

Abschluss Hinweise

Es ist wichtig zu beachten, dass verspottete Abschlussklassen mit Bedacht eingesetzt werden sollten, da dies zu fragilen Tests führen kann, die möglicherweise fehlschlagen, wenn sich die Implementierung der Abschlussklasse ändert. Wenn möglich, ist das Erstellen nicht endgültiger Klassen für die Abhängigkeitsinjektion ein bevorzugter Testansatz.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Mockito Abschlussklassen in Java simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn