1
resposta

Dúvidas com doThrow

Quando usamos mocks, a execução deve simular o mundo real. Sendo assim, a quantidade de leilões encerrados deveria ser 1, no exemplo abaixo.

   @Test void deveContinuarAExecucaoMesmoQuandoDaoFalha(){
        Calendar antiga = Calendar.getInstance();
        antiga.set(1999, 1 ,20);
        Leilao leilao1 = new CriadorDeLeilao().para("TV de plasma").naData(antiga).constroi();
        Leilao leilao2 = new CriadorDeLeilao().para("Geladeira").naData(antiga).constroi();

        LeilaoDao leilaoDao = mock(LeilaoDao.class);
        when(leilaoDao.correntes()).thenReturn(Arrays.asList(leilao1, leilao2));
        doThrow(new RuntimeException()).when(leilaoDao).atualiza(leilao1);

        EnviadorDeEmail carteiro = mock(EnviadorDeEmail.class);

        EncerradorDeLeilao encerradorDeLeilao = new EncerradorDeLeilao(leilaoDao, carteiro);
        encerradorDeLeilao.encerra();

        verify(leilaoDao, times(1)).atualiza(leilao2);
        verify(carteiro, times(1)).envia(leilao2);

        assertEquals(1, encerradorDeLeilao.getTotalEncerrados());
//        assertTrue(leilao1.isEncerrado());
        assertTrue(leilao2.isEncerrado());
    }

No entanto, o teste falha, indicando que a quantidade de leilões encerrados é 2.

Confere esse comportamento?

1 resposta

Oi Diego, tudo bem? Queria ver a implementação para ter certeza por que depende de como o seu getTotalEncerrados está implementado. Se ele estiver incrementando sem considerar a lógica de encerramento, o comportamento vai estar incorreto em relação a contagem e não ao encerramento em si.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software