Maison >Java >javaDidacticiel >Comment puis-je me moquer sélectivement des méthodes dans Mockito pour une moquerie partielle ?
Utilisez Mockito pour la moquerie sélective de méthodes
Mockito offre une flexibilité pour se moquer de méthodes spécifiques au sein d'une classe. En tirant parti des simulations partielles, les développeurs peuvent choisir les méthodes à remplacer tout en laissant les autres intactes.
Par exemple, considérons une classe Stock avec les méthodes getPrice(), getQuantity() et getValue(). Vous souhaiterez peut-être vous moquer des deux premières méthodes pour leurs valeurs de retour, mais laissez getValue() conserver son comportement d'origine.
En utilisant une simulation partielle dans Mockito, vous pouvez obtenir cette précision. L'objet Stock est instancié sous forme de simulation, tandis que des attentes spécifiques sont définies pour getPrice() et getQuantity(). Voici un exemple :
Stock stock = mock(Stock.class); when(stock.getPrice()).thenReturn(100.00); when(stock.getQuantity()).thenReturn(200);
En appelant thenCallRealMethod() pour getValue(), vous préservez son implémentation réelle :
when(stock.getValue()).thenCallRealMethod();
Alternativement, un espion peut être utilisé, où toutes les méthodes font initialement référence à la mise en œuvre réelle. Seules les méthodes explicitement tronquées adopteront le comportement modifié. Voici l'approche d'espionnage :
Stock stock = spy(Stock.class); when(stock.getPrice()).thenReturn(100.00); when(stock.getQuantity()).thenReturn(200);
Notez que lors de l'utilisation d'espions, il est crucial d'éviter d'appeler la méthode réelle dans une méthode stubbée.
Une autre option encore implique l'indicateur Mockito.CALLS_REAL_METHODS :
Stock MOCK_STOCK = Mockito.mock( Stock.class, CALLS_REAL_METHODS );
Cette approche délègue les méthodes non stubbées à leur implémentations.
Cependant, dans l'exemple Stock donné, cette stratégie de moquerie partielle peut toujours échouer en raison de la dépendance de getValue() à la fois sur price et quantité directement, pas uniquement sur leurs getters.
De plus, envisagez d'éviter carrément les moqueries lorsque possible :
Stock stock = new Stock(100.00, 200); double value = stock.getValue(); assertEquals("Stock value not correct", 100.00*200, value, .00001);
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!