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!