Heim > Java > javaLernprogramm > Hauptteil

Wie verspotte ich bestimmte Methodenaufrufe in Superklassen mit Mockito?

Susan Sarandon
Freigeben: 2024-10-30 18:36:30
Original
168 Leute haben es durchsucht

How to Mock Specific Method Calls in Superclasses with Mockito?

Spezifische Methodenaufrufe in Superklassen mit Mockito verspotten

In Testszenarien kann es notwendig sein, nur bestimmte Methodenaufrufe in einer Superklasse zu verspotten das ursprüngliche Verhalten anderer bewahren. Dies kann mithilfe der flexiblen Mockito-Funktionen von Mockito erreicht werden.

Beachten Sie die folgende Klassenhierarchie:

<code class="java">class BaseService {

    public void save() {...}
}

class ChildService extends BaseService {

    public void save() {
        // Custom logic
        super.save();
    }
}</code>
Nach dem Login kopieren

In diesem Beispiel möchten wir nur den Aufruf von super.save() in ChildService verspotten während die ursprüngliche Implementierung von save() in BaseService ausgeführt werden kann.

Um dies zu erreichen, können wir die Spionagefunktion verwenden, um einen Proxy von ChildService zu erstellen:

<code class="java">ChildService classToTest = Mockito.spy(new ChildService());</code>
Nach dem Login kopieren

Als nächstes führen wir Sie müssen das Verhalten von super.save() im Kontext von ChildService stoppen. Da sich super jedoch auf die BaseService-Klasse innerhalb von ChildService bezieht, müssen wir classToTest in BaseService umwandeln, bevor wir Mockito.doNothing() verwenden.

<code class="java">Mockito.doNothing().when((BaseService)classToTest).validate();</code>
Nach dem Login kopieren

Durch Stubbing der „validate()“-Methode von BaseService verhindern wir effektiv es verhindert, dass es während des Tests aufgerufen wird. Folglich wird nur der super.save()-Aufruf in ChildService vom Mock abgefangen.

Um den Test abzuschließen, können wir jetzt save() für classToTest aufrufen und behaupten, dass die erwartete Logik in ChildService ausgeführt wird:

<code class="java">classToTest.save();
verify(classToTest).load();</code>
Nach dem Login kopieren

Dieser Ansatz ermöglicht es uns, bestimmte Methodenaufrufe in Superklassen selektiv zu verspotten und gleichzeitig die Funktionalität der geerbten Methoden beizubehalten. Es erweist sich in Situationen als wertvoll, in denen eine Änderung der Klassenhierarchie oder eine Umgestaltung des Codes nicht möglich ist.

Das obige ist der detaillierte Inhalt vonWie verspotte ich bestimmte Methodenaufrufe in Superklassen mit Mockito?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!