Quero usar o Mockito para testar o código (simplificado) abaixo. Não sei como dizer a Mockito para fracassar na primeira vez e depois ter sucesso na segunda vez.
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();
}
}
Posso configurar o teste de sucesso com:
Mockito.when(myMock).doTheCall().thenReturn("Success");
E o teste de falha com:
Mockito.when(myMock).doTheCall().thenReturn("you failed");
Mas como posso testar se, se falhar uma (ou duas vezes), está tudo bem?
doThrow(new RuntimeException()).doNothing().when(myMock).doTheCall();
A maneira mais curta de escrever o que você quer é
Quando você fornece vários argumentos para
thenReturn
assim, cada argumento será usado no máximo uma vez, exceto para o último argumento, que é usado quantas vezes forem necessárias. Por exemplo, neste caso, se você fizer a ligação 4 vezes, obterá "Sucesso", "você falhou", "falhou", "falhou".fonte
Como o comentário relacionado a isso é difícil de ler, adicionarei uma resposta formatada.
Se você estiver tentando fazer isso com uma
void
função que apenas lança uma exceção, seguida por uma etapa sem comportamento, você faria algo assim:fonte
Para adicionar a isso e a isso resposta, você também pode usar um loop para encadear as chamadas simuladas. Isso é útil se você precisa simular a mesma coisa várias vezes, ou simular em algum padrão.
Por exemplo, (embora improvável):
fonte
Eu tenho uma situação diferente, eu queria simular uma
void
função para a primeira chamada e executá-la normalmente na segunda chamada.Isso funciona para mim:
fonte