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