sexta-feira, 7 de maio de 2021

Exemplo de teste com JUnit e Mockito

       Nesse post eu trago um exemplo de testes usando Mockito para simular o comportamento de uma classe DAO, substituindo seu acesso ao banco por dados criados específicamente para os testes, de maneira que possamos testar apenas o comportamento desejado e não a integração com banco de dados, etc. Esse exemplo é do curso que fiz da Alura sobre testes com Mockito.


/**

 * Resumo:

 * 1 - Cria as propriedades SERVICE(s) e DAO(s)

 * 2 - No metodo inicializar:

 *      1 - mocka o(s) DAO(s)

 *      2 - inicia o(s) SERVICE(s) com os respectivos DAO(s) mockados

 * 3 - Cria os métodos de teste

 */

class FinalizarLeilaoServiceTest {

 

    private FinalizarLeilaoService finalizarLeilaoService;

 

    private LeilaoDao leilaoDao;

 

    @BeforeEach

    void inicializar() {

        // inicializa o mock e passa pro service

        leilaoDao = Mockito.mock( LeilaoDao.class );

        finalizarLeilaoService = new FinalizarLeilaoService( leilaoDao );

    }

 

    @Test

    void deveriaFinalizarLeilao() {

        List<Leilao> leiloes = leiloes();

 

        // defino o retorno de metodos do DAO mockado

        Mockito.when( leilaoDao.buscarLeiloesExpirados() ).thenReturn( leiloes );

 

        // metodo testado

        finalizarLeilaoService.finalizarLeiloesExpirados();

 

        // resultados esperados

        Leilao leilao = leiloes.get( 0 );

        Assert.assertTrue( leilao.isFechado() );

        Assert.assertEquals( new BigDecimal( "900" ), leilao.getLanceVencedor().getValor() );

        // Testa se determinado método do DAO foi chamado

        Mockito.verify( leilaoDao ).salvar( leilao );

    }

 

    //método com dados hardcode para teste

    private List<Leilao> leiloes() {

        List<Leilao> leiloes = new ArrayList<>();

 

        Leilao leilao = new Leilao( "Celular", new BigDecimal( "500" ), new Usuario( "Alguém" ) );

 

        Lance primeiro = new Lance( new Usuario( "Outro Alguém" ), new BigDecimal( "600" ) );

        Lance segundo = new Lance( new Usuario( "Mais Alguém" ), new BigDecimal( "900" ) );

        Lance terceiro = new Lance( new Usuario( "Um Alguém" ), new BigDecimal( "500" ) );

 

        leilao.propoe( primeiro );

        leilao.propoe( segundo );

        leilao.propoe( terceiro );

        leiloes.add( leilao );

        return leiloes;

    }

}



Nenhum comentário:

Postar um comentário