Mockito - Explorer la distinction entre doReturn() et when() pour la moquerie
Lors de l'exploitation de la puissance de Mockito dans une application Spring MVC, les développeurs nous rencontrons souvent la similitude entre doReturn(...).when(...) et when(...).thenReturn(...). Cela soulève la question de savoir pourquoi ces deux méthodes existent, étant donné leur apparente équivalence.
Bien que les deux approches donnent le même résultat avec des simulations annotées avec @Mock, une différence subtile apparaît lors de l'utilisation d'objets espionnés annotés avec @Spy. Contrairement à when(...).thenReturn(...), qui exécute l'appel de méthode réel avant de renvoyer la valeur spécifiée, doReturn(...) contourne entièrement l'appel de méthode.
Cette distinction devient cruciale lorsque traiter des objets espionnés qui ont des méthodes qui lèvent des exceptions. Par exemple, considérons la classe suivante avec deux méthodes :
public class MyClass { protected String methodToBeTested() { return anotherMethodInClass(); } protected String anotherMethodInClass() { throw new NullPointerException(); } }
Dans la classe de test :
@Spy private MyClass myClass; // ... // Executes methodToBeTested() and swallows the NullPointerException doReturn("test").when(myClass).anotherMethodInClass(); // Throws NullPointerException without executing methodToBeTested() when(myClass.anotherMethodInClass()).thenReturn("test");
Comme démontré, doReturn(...) vous permet de contrôler la valeur de retour sans déclencher l'exécution de la méthode, tandis que when(...) exécute d'abord la méthode et fournit ensuite seulement le résultat spécifié. Cette différence subtile permet un meilleur contrôle sur la moquerie des objets et la gestion des exceptions, faisant de doReturn(...) le choix préféré lorsqu'il s'agit d'objets espionnés susceptibles de générer des exceptions.
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!