Heim  >  Artikel  >  Java  >  So verspotten Sie einen Methodenaufruf einer Superklasse mit Mockito: Ein praktischer Leitfaden

So verspotten Sie einen Methodenaufruf einer Superklasse mit Mockito: Ein praktischer Leitfaden

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 04:42:02755Durchsuche

How to Mock a Method Call from a Superclass with Mockito: A Practical Guide

Mockito-Herausforderungen meistern: Einen Methodenaufruf einer Superklasse verspotten

Mockito, ein Java-Mocking-Framework, bietet ein leistungsstarkes Tool zum Isolieren von Methodenaufrufen während des Tests. In bestimmten Szenarien ist es jedoch erforderlich, nur bestimmte Aufrufe zu verspotten, insbesondere wenn es um Vererbung geht.

Beachten Sie die folgende Klassenhierarchie:

<code class="java">class BaseService {  
    public void save() {...}  
}

public Childservice extends BaseService {  
    public void save(){  
        //some code  
        super.save();
    }  
}   </code>

Das Ziel besteht darin, nur den Aufruf von super.save( zu verspotten ) in der ChildService-Klasse, wobei der ursprüngliche Methodenaufruf beim ersten Aufruf erhalten bleibt.

Ein Ansatz besteht darin, Mockitos spy()-Methode strategisch zu verwenden, um eine Nachbildung der ChildService-Klasse zu erstellen. Durch das Stubbing der Methode „validate()“ der Klasse „BaseService“, die in super.save() aufgerufen wird, verhindern wir effektiv den unerwünschten Methodenaufruf:

<code class="java">class BaseService {

    public void validate(){
        fail(" I must not be called");
    }

    public void save(){
        //Save method of super will still be called.
        validate();
    }
}

class ChildService extends BaseService{

    public void load(){}

    public void save(){
        super.save();
        load();
    }
}

@Test
public void testSave() {
    ChildService classToTest = Mockito.spy(new ChildService());

    // Prevent/stub logic in super.save()
    Mockito.doNothing().when((BaseService)classToTest).validate();

    // When
    classToTest.save();

    // Then
    verify(classToTest).load();
}</code>

Dieser Ansatz isoliert effektiv den Aufruf von super.save( ), während der ursprüngliche Methodenaufruf für den ersten Aufruf zugelassen wird. Dadurch wird sichergestellt, dass sich der Test gezielt auf die gewünschte zu prüfende Methode konzentriert.

Das obige ist der detaillierte Inhalt vonSo verspotten Sie einen Methodenaufruf einer Superklasse mit Mockito: Ein praktischer Leitfaden. 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