


Comment se moquer uniquement d'un appel de méthode spécifique dans une superclasse avec Mockito ?
Oct 31, 2024 am 06:17 AMSe moquer uniquement d'un appel de méthode spécifique dans la superclasse avec Mockito
Lors de la réalisation de tests unitaires à l'aide de Mockito, il peut être nécessaire de se moquer uniquement d'un appel spécifique appel à une méthode dans une superclasse tout en laissant les autres appels inchangés. Considérez le scénario suivant :
<code class="java">class BaseService { public void save() {...} } public Childservice extends BaseService { public void save(){ //some code super.save(); } }</code>
Dans cet exemple, vous souhaitez vous moquer uniquement de l'appel à super.save() dans la classe ChildService, en préservant le comportement de l'autre appel de méthode save().
Solution utilisant l'espionnage et le stubbing
Bien que le refactoring puisse être une solution viable, elle n'est pas toujours réalisable. Dans de tels cas, vous pouvez tirer parti des techniques d'espionnage et de stubbing pour obtenir le comportement moqueur souhaité :
<code class="java">@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>
Explication :
- Créer une instance de ChildService classe utilisant la méthode spy() de Mockito. Cela crée un objet espion qui peut être utilisé pour se moquer sélectivement des méthodes.
- Stub la méthode dans la superclasse dont vous ne voulez pas vous moquer. Cela se fait en utilisant Mockito.doNothing(). Dans l'exemple, la méthode validate() de la superclasse est stubbée.
- Effectuez l'action sur l'objet espion (dans ce cas, en appelant save()).
- Vérifiez que la méthode spécifique un appel a été effectué sur l'objet espion (dans ce cas, load() est vérifié).
En utilisant l'espionnage et le stubbing, vous pouvez simuler efficacement le comportement moqueur souhaité, vous permettant ainsi de tester des appels de méthode spécifiques au sein des superclasses tout en préservant la fonctionnalité d'origine.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités

Iceberg: L'avenir des tables de Data Lake

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?

Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe

Comment partager les données entre les étapes du concombre
