Comment puis-je faire un Mockito se moquer d'effectuer différentes actions dans la séquence?
Le code suivant:
ObjectMapper mapper = Mockito.mock(ObjectMapper.class);
Mockito.doThrow(new IOException()).when(mapper).writeValue((OutputStream) Matchers.anyObject(), Matchers.anyObject());
Mockito.doNothing().when(mapper).writeValue((OutputStream) Matchers.anyObject(), Matchers.anyObject());
try {
mapper.writeValue(new ByteArrayOutputStream(), new Object());
} catch (Exception e) {
System.out.println("EXCEPTION");
}
try {
mapper.writeValue(new ByteArrayOutputStream(), new Object());
} catch (Exception e) {
System.out.println("EXCEPTION");
}
La sortie attendue est
EXCEPTION
droit?
Mais je ne reçois rien
Si je puis faire le doThrow après la ne rien faire-je obtenir
EXCEPTION
EXCEPTION
Donc, On dirait que c'est la dernière parodie de qui est celui qui est pris... je pensais que ça allait prendre les objets fantaisie dans l'ordre qu'ils sont inscrits?
Je suis à la recherche pour produire une maquette lève l'exception de la première heure et se termine normalement la deuxième fois...
OriginalL'auteur Michael Wiles | 2013-11-20
Vous devez vous connecter pour publier un commentaire.
Mockito pouvez stub consécutives comportement avec les mêmes paramètres—pour toujours répéter la dernière instruction—mais ils ont tous à faire partie de la même "chaîne". Sinon Mockito efficacement pense que vous avez changé votre esprit et remplace votre déjà moqué de comportement, ce qui n'est pas mauvaise en fonction de si vous avez établi de bonnes valeurs par défaut dans un
setUp
ou@Before
méthode et souhaitez remplacer des cas de test.Les règles générales "qui Mockito action qui va se passer": La plus récemment chaîne définie par l' qui correspond à tous les arguments seront sélectionnés. Au sein de la chaîne, chaque action qui va arriver une fois (en comptant plusieurs
thenReturn
valeurs si commethenReturn(1, 2, 3)
), et puis la dernière action sera répétée indéfiniment.C'est l'équivalent de enchaînés
thenVerb
états les plus communs dewhen
syntaxe, qui vous a bien évité ici pour votrevoid
méthode:Notez que vous pouvez utiliser des importations pour
Mockito.doThrow
etMatchers.*
, et de passer àany(OutputStream.class)
au lieu de(OutputStream) anyObject()
, et le vent:Voir Mockito de la documentation de Stubber pour une liste complète des commandes que vous pouvez de la chaîne.
OriginalL'auteur Jeff Bowman