Je souhaite utiliser Mockito pour tester le code (simplifié) ci-dessous. Je ne sais pas comment dire à Mockito d'échouer la première fois, puis de réussir la deuxième fois.
for(int i = 1; i < 3; i++) {
String ret = myMock.doTheCall();
if("Success".equals(ret)) {
log.write("success");
} else if ( i < 3 ) {
log.write("failed, but I'll try again. attempt: " + i);
} else {
throw new FailedThreeTimesException();
}
}
Je peux configurer le test de réussite avec:
Mockito.when(myMock).doTheCall().thenReturn("Success");
Et le test d'échec avec:
Mockito.when(myMock).doTheCall().thenReturn("you failed");
Mais comment puis-je tester que si cela échoue une (ou deux fois) puis réussit, tout va bien?
doThrow(new RuntimeException()).doNothing().when(myMock).doTheCall();
Le moyen le plus court d'écrire ce que vous voulez est
Lorsque vous fournissez plusieurs arguments
thenReturn
comme ceci, chaque argument sera utilisé au plus une fois, à l'exception du tout dernier argument, qui est utilisé autant de fois que nécessaire. Par exemple, dans ce cas, si vous passez l'appel 4 fois, vous obtiendrez "Succès", "vous avez échoué", "vous avez échoué", "vous avez échoué".la source
Étant donné que le commentaire qui s'y rapporte est difficile à lire, j'ajouterai une réponse formatée.
Si vous essayez de le faire avec une
void
fonction qui lève simplement une exception, suivie d'une étape de non-comportement, vous feriez quelque chose comme ceci:la source
Pour ajouter à ceci et à cette réponse, vous pouvez également utiliser une boucle pour enchaîner les appels simulés. Ceci est utile si vous devez vous moquer de la même chose plusieurs fois ou vous moquer d'un modèle.
Par exemple (même si c'est tiré par les cheveux):
la source
J'ai une situation différente, je voulais simuler une
void
fonction pour le premier appel et l'exécuter normalement au deuxième appel.Cela fonctionne pour moi:
la source