Maison  >  Article  >  Java  >  Comment se moquer uniquement d'un appel de méthode spécifique dans une superclasse avec Mockito ?

Comment se moquer uniquement d'un appel de méthode spécifique dans une superclasse avec Mockito ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 06:17:02937parcourir

How to Mock Only a Specific Method Call in a Superclass with Mockito?

Se 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 :

  1. 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.
  2. 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.
  3. Effectuez l'action sur l'objet espion (dans ce cas, en appelant save()).
  4. 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!

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