Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

O método Mockito.verifyNoInteraction passa no teste mesmo não devendo passar

Professor bom dia, vi em outro tópico que deveríamos colocar o metodo verifyNoInteraction fora do try catch, agora ele realmente está passando por essa chamada mas não sei o porque, passando :Mockito.verifyNoInteractions(enviadorDeEmails); ou Mockito.verify(enviadorDeEmails); , os dois testes passam, acredito que o segundo não deveria passar já que não teve interação com o "enviadorDeEmails". fiquei na duvida agora

@Test
    void naoDeveriaEnviarEmailParaVencedorDoLeilaoEmCasoDeErroEncerrarOLeilao() {
        List<Leilao> leiloes = leiloes();

        Mockito.when(dao.buscarLeiloesExpirados()).thenReturn(leiloes);
        Mockito.when(dao.salvar(Mockito.any())).thenThrow(RuntimeException.class);

        try {
            service.finalizarLeiloesExpirados();
        } catch (Exception e) {}
        Mockito.verifyNoInteractions(enviadorDeEmails);
    }
1 resposta
solução!

Oi Fabio,

No vídeo eu acabei escrevendo errado o código, pois a linha do Mockito.verifyNoInteractions(enviadorDeEmails); deveria estar dentro do catch e não do try, senão essa linha nunca será chamada, pois a linha anterior, da chamada ao método service.finalizarLeiloesExpirados(); vai lançar a exception e pular direto pro catch, que como está vazio e não tem mais asserts, o JUnit considera que o teste passou.

O correto é o código ficar assim então:

@Test
void naoDeveriaEnviarEmailParaVencedorDoLeilaoEmCasoDeErroEncerrarOLeilao() {
    List<Leilao> leiloes = leiloes();

    Mockito.when(dao.buscarLeiloesExpirados()).thenReturn(leiloes);
    Mockito.when(dao.salvar(Mockito.any())).thenThrow(RuntimeException.class);

    try {
        service.finalizarLeiloesExpirados();
    } catch (Exception e) {
        Mockito.verifyNoInteractions(enviadorDeEmails);
    }
}

Também pode ser do jeito que você mencionou, com a linha do Mockito.verifyNoInteractions(enviadorDeEmails); após o catch, pois assim o junit sempre vai passar por essa linha, independente de ter entrado ou não no catch. O problema é que desse jeito não dá para saber se realmente aconteceu a exception, pois a verificação estará fora do catch.