Maison  >  Article  >  Java  >  Comment se moquer d'un appel de méthode depuis une superclasse avec Mockito : un guide pratique

Comment se moquer d'un appel de méthode depuis une superclasse avec Mockito : un guide pratique

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 04:42:02755parcourir

How to Mock a Method Call from a Superclass with Mockito: A Practical Guide

Surmonter les défis de Mockito : se moquer d'un appel de méthode à partir d'une superclasse

Mockito, un framework de moquerie Java, fournit un outil puissant pour isoler les appels de méthode pendant les tests. Cependant, certains scénarios nécessitent de se moquer uniquement d'appels spécifiques, en particulier lorsqu'il s'agit d'héritage.

Considérez la hiérarchie de classes suivante :

<code class="java">class BaseService {  
    public void save() {...}  
}

public Childservice extends BaseService {  
    public void save(){  
        //some code  
        super.save();
    }  
}   </code>

Le but est de se moquer uniquement de l'appel à super.save( ) dans la classe ChildService, en laissant intacte l'invocation de la méthode d'origine pour le premier appel.

Une approche consiste à utiliser stratégiquement la méthode spy() de Mockito pour créer une simulation de la classe ChildService. En supprimant la méthode validate() de la classe BaseService, qui est appelée dans super.save(), nous empêchons efficacement l'appel de méthode indésirable :

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

Cette approche isole efficacement l'appel à super.save( ) tout en autorisant l'invocation de la méthode d'origine pour le premier appel. Il garantit que le test se concentre spécifiquement sur la méthode souhaitée examinée.

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