Maison >Java >javaDidacticiel >Mockito : `doReturn()` contre `when()` : quand dois-je utiliser lequel ?
Mockito : Comprendre la différence entre doReturn() et when()
Il est compréhensible de rencontrer une confusion entre doReturn() de Mockito... méthodes when() et when()...thenReturn(), car elles peuvent sembler faire la même chose. Bien que les deux puissent simuler des appels de méthode et renvoyer des valeurs prédéfinies, il existe une distinction subtile qui devient pertinente lors de l'utilisation d'objets espionnés (annotés avec @Spy) au lieu de simulacres (annotés avec @Mock).
La clé Différence : comportement d'invocation de méthode
La différence cruciale réside dans la façon dont ces méthodes se comportent lors de l'interaction avec des espions. objets :
Exemple pour illustrer la différence :
Considérez le code suivant :
public class MyClass { public String methodToBeTested() { return anotherMethodInClass(); } public String anotherMethodInClass() { throw new NullPointerException(); } }
Test avec un objet espionné :
@Spy private MyClass myClass; // ... // This approach will work without throwing an exception doReturn("test").when(myClass).anotherMethodInClass(); // This approach will throw a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
Avec un objet espionné, when()...thenReturn() tente d'appeler anotherMethodInClass() qui lancera une NullPointerException. En revanche, doReturn()...when() évite d'appeler la méthode et renvoie directement "test", supprimant l'exception.
Conclusion
La différence entre ces deux méthodes apparaissent lors de l’utilisation d’objets espionnés. Pour les objets espionnés, doReturn()...when() offre un meilleur contrôle en contournant les appels de méthode réels et en renvoyant directement les valeurs prédéfinies. En revanche, when()...thenReturn() appelle les vraies méthodes, ce qui peut conduire à des exceptions ou à d'autres comportements involontaires. Ainsi, le choix de la méthode appropriée dépend du comportement souhaité et du fait que vous utilisez un objet simulé ou espionné.
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!