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
Libérer: 2024-10-30 18:36:30
original
250 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal