Maison > Java > javaDidacticiel > Mockito : `doReturn()` vs `when()` : quand devriez-vous utiliser Which avec des objets espionnés ?

Mockito : `doReturn()` vs `when()` : quand devriez-vous utiliser Which avec des objets espionnés ?

Patricia Arquette
Libérer: 2024-11-28 18:19:15
original
1055 Les gens l'ont consulté

Mockito: `doReturn()` vs. `when()`: When Should You Use Which with Spied Objects?

Mockito : Comprendre la différence subtile entre doReturn() et when()

Lors de l'utilisation du framework moqueur Mockito pour améliorer les capacités de test, les développeurs rencontrent souvent doReturn() et les méthodes when(). Bien que les deux méthodes servent à supprimer les invocations de méthodes, une distinction subtile existe entre elles lorsque vous travaillez avec des objets espionnés (annotés avec @Spy).

when(...).thenReturn(...) vs doReturn(...).when(...)

when(...).thenReturn(...):

  • Fait un véritable appel de méthode avant de renvoyer la valeur spécifiée.
  • Si la méthode appelée lève une exception, elle doit être gérée ou moquée séparément.

doReturn(...).when(...):

  • Évite entièrement l'appel de méthode réel.

Exemple pratique

Considérez ce qui suit MyClass :

public class MyClass {
    protected String methodToBeTested() {
        return anotherMethodInClass();
    }

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}
Copier après la connexion

Test avec Spy

doReturn(...).when(...):

@Spy
private MyClass myClass;

// Works as expected
doReturn("test").when(myClass).anotherMethodInClass();
Copier après la connexion

when(...).thenReturn(...):

// Throws a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");
Copier après la connexion

Dans ce scénario, doReturn() garantit que l'exception dans anotherMethodInClass() est évitée tout en renvoyant la valeur souhaitée. En revanche, when() déclenche l'appel de méthode réel, ce qui entraîne la levée de l'exception NullPointerException.

Par conséquent, lorsque vous travaillez avec des objets espionnés, le choix entre doReturn() et when() dépend si vous souhaitez invoquer la méthode actuelle ou la contourner complètement.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal