Maison >Java >javaDidacticiel >DoReturn() de Mockito et when() : quelle est la différence lors de l'utilisation d'objets espionnés ?

DoReturn() de Mockito et when() : quelle est la différence lors de l'utilisation d'objets espionnés ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 17:28:10543parcourir

Mockito's doReturn() vs. when(): What's the Difference When Using Spied Objects?

Comprendre la distinction entre doReturn() et when() de Mockito

Lors du développement d'applications Spring MVC, l'utilisation de Mockito pour simuler la couche de service les objets sont une pratique courante. En explorant les capacités de Mockito, il devient évident que doReturn(...).when(...) et when(...).thenReturn(...) semblent remplir la même fonction. Cela soulève la question : y a-t-il une différence entre ces deux méthodes ?

La distinction clé entre doReturn() et when() devient évidente lors de l'utilisation d'objets espionnés (annotés avec @Spy) au lieu de simulacres (annotés avec @ Mock).

doReturn() contre when() avec Spied Objets

  • doReturn(...).when(...) : Permet de modifier la valeur de retour d'une méthode sans réellement l'invoquer.
  • when(...).thenReturn(...) : appelle l'exécution réelle de la méthode avant de renvoyer le spécifié valeur.

Exemple

Considérez le code suivant :

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

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}

Cas de test :

@Spy
private MyClass myClass;

// Works fine, does not invoke anotherMethodInClass()
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException because anotherMethodInClass() is invoked
when(myClass.anotherMethodInClass()).thenReturn("test");

En résumé, lors de l'utilisation d'objets espionnés, doReturn() vous permet d'ignorer l'exécution de la méthode et de définir directement la valeur de retour, tandis que when() appelle la méthode réelle avant de renvoyer la valeur souhaitée. Cette compréhension est cruciale lorsque l'on travaille avec des objets espionnés dans Mockito.

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