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!