Maison >Java >javaDidacticiel >Comment se moquer d'appels de méthodes spécifiques dans les superclasses avec Mockito ?

Comment se moquer d'appels de méthodes spécifiques dans les superclasses avec Mockito ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 18:36:30255parcourir

How to Mock Specific Method Calls in Superclasses with Mockito?

Se moquer des appels de méthodes spécifiques dans les superclasses avec Mockito

Dans les scénarios de test, il peut être nécessaire de se moquer uniquement des appels de méthodes spécifiques dans une superclasse tout en préserver le comportement original des autres. Ceci peut être réalisé en utilisant les capacités de simulation flexibles de Mockito.

Considérez la hiérarchie de classes suivante :

<code class="java">class BaseService {

    public void save() {...}
}

class ChildService extends BaseService {

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

Dans cet exemple, nous voulons nous moquer uniquement de l'appel à super.save() dans ChildService. tout en permettant l'exécution de l'implémentation originale de save() dans BaseService.

Pour y parvenir, nous pouvons utiliser la fonction espion pour créer un proxy de ChildService :

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

Ensuite, nous besoin de supprimer le comportement de super.save() dans le contexte de ChildService. Cependant, puisque super fait référence à la classe BaseService dans ChildService, nous devons convertir classToTest en BaseService avant d'utiliser Mockito.doNothing().

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

En supprimant la méthode validate() de BaseService, nous empêchons efficacement d'être appelé pendant le test. Par conséquent, seul l'appel super.save() dans ChildService sera intercepté par le mock.

Pour terminer le test, nous pouvons maintenant appeler save() sur classToTest et affirmer que la logique attendue dans ChildService est exécutée :

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

Cette approche nous permet de nous moquer sélectivement d'appels de méthodes spécifiques dans les superclasses tout en préservant la fonctionnalité des méthodes héritées. Cela s'avère utile dans les situations où la modification de la hiérarchie des classes ou la refactorisation du code n'est pas réalisable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn