Verspotten von Methodenaufrufen von Superklassen in untergeordneten Klassen
Bei Unit-Tests ist es manchmal notwendig, einen Methodenaufruf innerhalb einer Unterklasse zu verspotten, während die Unterklasse verlassen wird ursprüngliches Verhalten in der Superklasse intakt. Dieses Szenario kann auftreten, wenn Methoden getestet werden, die an übergeordnete Klassen delegieren.
Betrachten Sie das folgende Beispiel:
<code class="java">class BaseService { public void save() {...} } public Childservice extends BaseService { public void save(){ //some code super.save(); } }</code>
In diesem Fall erfordert ein Test nur das Verspotten des Aufrufs von super.save() in der ChildService-Methode unter Beibehaltung des ursprünglichen Verhaltens der save()-Methode in der BaseService-Klasse.
Ein Ansatz, dies zu erreichen, ist die Verwendung der von Mockito bereitgestellten Spionagefunktionalität. Durch das Ausspionieren der ChildService-Instanz ist der Zugriff auf die BaseService-Instanz möglich, was eine differenzierte Kontrolle über den Methodenaufruf ermöglicht:
<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>
Durch das Verspotten der „validate()“-Methode in der BaseService-Klasse stellt der Test dies sicher Die ursprüngliche Logik in super.save() wird nicht ausgeführt. Darüber hinaus wird durch Stubbing der Methode „load()“ in der Klasse „ChildService“ überprüft, ob sie wie erwartet aufgerufen wird. Dieser Ansatz bietet eine differenzierte Kontrolle über Methodenaufrufe und ermöglicht die Isolierung spezifischer Funktionen während des Tests.
Das obige ist der detaillierte Inhalt vonWie kann der Aufruf einer Superklassenmethode in einer untergeordneten Klasse simuliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!