Quiero usar Mockito para probar el código (simplificado) a continuación. No sé cómo decirle a Mockito que falle la primera vez y luego tenga éxito la segunda.
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();
}
}
Puedo configurar la prueba de éxito con:
Mockito.when(myMock).doTheCall().thenReturn("Success");
Y la prueba de falla con:
Mockito.when(myMock).doTheCall().thenReturn("you failed");
Pero, ¿cómo puedo probar que si falla una vez (o dos) y luego tiene éxito, está bien?
doThrow(new RuntimeException()).doNothing().when(myMock).doTheCall();
La forma más corta de escribir lo que quieres es
Cuando proporcione varios argumentos
thenReturn
así, cada argumento se usará como máximo una vez, excepto el último argumento, que se usa tantas veces como sea necesario. Por ejemplo, en este caso, si realiza la llamada 4 veces, obtendrá "éxito", "falló", "falló", "falló".fuente
Dado que el comentario relacionado con esto es difícil de leer, agregaré una respuesta formateada.
Si está intentando hacer esto con una
void
función que solo lanza una excepción, seguida de un paso sin comportamiento, entonces haría algo como esto:fuente
Para agregar esto y esta respuesta, también puede usar un bucle para encadenar las llamadas simuladas. Esto es útil si necesita simular lo mismo varias veces, o simular algún patrón.
Por ejemplo (aunque sea descabellado):
fuente
Tengo una situación diferente, quería simular una
void
función para la primera llamada y ejecutarla normalmente en la segunda llamada.Esto funciona para mi:
fuente