1
resposta

O método Mockito.verifyNoInteractions é realmente executado?

Ao executar o teste

    @Test
    void naoDeveriaEnviarEmailParaVencedorDoLeilaoEmCasoDeErroAoFinalizarLeilao() {
        List<Leilao> leiloes = this.leiloes();
        Mockito.when(this.leilaoDao.buscarLeiloesExpirados()).thenReturn(leiloes);
        Mockito.when(this.leilaoDao.salvar(Mockito.any())).thenThrow(RuntimeException.class);

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

A linha Mockito.verifyNoInteractions(this.enviadorDeEmails); não é executada quando o Mockito lança a exceção no método salvar. O teste passa, mas sem efetivamente testar a "não interação", pois a execução pula para o "catch". O correto me parece ser colocar a linha Mockito.verifyNoInteractions(this.enviadorDeEmails); após o try/catch ou num finally. Caso algum DEV coloque o envio de e-mail ANTES do método salvar, o teste ainda sim passará, mas o bug ocorrerá pois o teste está com esta falha. Está correto este raciocínio?

1 resposta

Oi Felippe,

Verdade! vacilei na explicacao e nao me atentei a esse detalhe :D

Bons estudos!