Maison > Java > javaDidacticiel > Comment se moquer partiellement des méthodes dans Mockito : se moquer de méthodes spécifiques tout en préservant les autres ?

Comment se moquer partiellement des méthodes dans Mockito : se moquer de méthodes spécifiques tout en préservant les autres ?

Barbara Streisand
Libérer: 2024-12-05 13:26:11
original
765 Les gens l'ont consulté

How to Partially Mock Methods in Mockito: Mocking Specific Methods While Preserving Others?

Moquerie partielle : moquerie de méthodes spécifiques dans Mockito

Lors du test d'une classe, il peut être nécessaire de se moquer uniquement de certaines méthodes tout en préservant le comportement des autres. Dans Mockito, cela est réalisé grâce à une « moquerie partielle », où une sélection de méthodes est simulée tandis que celles non simulées s'exécutent comme prévu.

Considérez la classe Stock suivante avec getPrice(), getQuantity() et getValue( ) méthodes :

public class Stock {
    ...
    public double getValue() {
        return getPrice() * getQuantity();
    }
}
Copier après la connexion

Dans un cas de test, si nous souhaitons nous moquer des méthodes getPrice() et getQuantity() mais laisser getValue() s'exécuter normalement, nous pouvons définir une simulation partielle comme suit :

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
when(stock.getValue()).thenCallRealMethod();
Copier après la connexion

Ici, les méthodes getPrice() et getQuantity() ont des implémentations simulées, tandis que getValue() s'exécute comme dans la classe Stock d'origine.

Vous pouvez également utiliser l'API "espion":

Stock stock = spy(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
Copier après la connexion

Tous les autres appels de méthode, dans ce cas getValue(), utilisent le vrai implémentation.

Pour garantir que la méthode réelle n'est pas appelée et que la logique moqueuse est appliquée de manière cohérente, considérez la notation alternative suivante :

doReturn(100.00).when(stock).getPrice();
doReturn(200).when(stock).getQuantity();
Copier après la connexion

Cependant, il est important de noter que dans cet exemple, la méthode getValue() s'appuie directement sur le prix et la quantité, et non sur leurs getters. Par conséquent, se moquer de getPrice() et getQuantity() peut toujours ne pas produire le comportement souhaité.

Une approche alternative serait d'éviter complètement de se moquer et de s'appuyer plutôt sur une instanciation directe de la classe Stock :

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();
Copier après la connexion

En créant une instance réelle, nous pouvons garantir que getValue() s'exécute comme prévu, en nous basant sur les valeurs réelles de prix et de quantité.

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