Maison > Java > javaDidacticiel > Mockito : `doReturn()` contre `when()` – Quand dois-je utiliser Which pour me moquer ?

Mockito : `doReturn()` contre `when()` – Quand dois-je utiliser Which pour me moquer ?

Linda Hamilton
Libérer: 2024-12-09 16:01:16
original
982 Les gens l'ont consulté

Mockito: `doReturn()` vs. `when()` – When Should I Use Which for Mocking?

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();
    }
}
Copier après la connexion

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");
Copier après la connexion

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!

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