Existe-t-il un moyen pour qu'une méthode tronquée renvoie différents objets lors des invocations suivantes? Je voudrais faire cela pour tester les réponses non déterminées d'un ExecutorCompletionService
. c'est-à-dire pour tester que quel que soit l'ordre de retour des méthodes, le résultat reste constant.
Le code que je cherche à tester ressemble à ceci.
// Create an completion service so we can group these tasks together
ExecutorCompletionService<T> completionService =
new ExecutorCompletionService<T>(service);
// Add all these tasks to the completion service
for (Callable<T> t : ts)
completionService.submit(request);
// As an when each call finished, add it to the response set.
for (int i = 0; i < calls.size(); i ++) {
try {
T t = completionService.take().get();
// do some stuff that I want to test
} catch (...) { }
}
doAnswer
ou d'écrire unAnswer
dans le cas que vous mentionnez. Vous pouvez simplement utiliserdoReturn(...).when(someSpy).someMethod(...)
. Il semble raisonnable de supposer qu'Emma s'intéresse aux moqueries, plutôt qu'aux espions, mais je suppose que je pourrais ajouter quelque chose à ma réponse pour l'expliquer. Merci pour le commentaire.Comme indiqué précédemment presque tous les appels sont chaînables.
Vous pouvez donc appeler
Plus d'informations dans Mockito's Documenation .
la source
mock.method
été appelée dans cet exemple? Je veux quelque chose comme, retourner foo la première fois mais retourner la barre pour TOUS les autres.Vous pouvez même enchaîner des
doReturn()
invocations de méthode comme celle-cimignon n'est-ce pas :)
la source
J'ai implémenté une
MultipleAnswer
classe qui m'aide à bloquer différentes réponses à chaque appel. Voici le morceau de code:la source
Les éléments suivants peuvent être utilisés comme méthode courante pour renvoyer différents arguments sur différents appels de méthode. La seule chose que nous devons faire est de passer un tableau avec ordre dans lequel les objets doivent être récupérés à chaque appel.
Ex.
getAnswerForSubsequentCalls(mock1, mock3, mock2);
renverra l'objet mock1 au premier appel, l'objet mock3 au deuxième appel et l'objet mock2 au troisième appel. Doit être utilisé commewhen(something()).doAnswer(getAnswerForSubsequentCalls(mock1, mock3, mock2));
ceci est presque similaire àwhen(something()).thenReturn(mock1, mock3, mock2);
la source
En relation avec la réponse de @ [Igor Nikolaev] d'il y a 8 ans, l'utilisation d'un
Answer
peut être quelque peu simplifiée en utilisant une expression lambda disponible dans Java 8.ou plus simplement:
la source
Style BDD:
la source
la source