Testes de integração com DBUnit

Postado por em   ●   3 comentários

DBUnit é uma extensão do JUnit para facilitar os testes de integração que envolvem banco de dados. Ele irá colocar os dados em um estado conhecido antes da execução de cada teste, assim evitamos problemas que podem ocorrer caso algum cenário corrompa ou altere os dados nos casos seguintes.

A ideia é muito simples, ao invés de você escrever vários SQL com insert e delete, o que seria muito chato e, complicado de dar manutenção, iremos colocar os dados em arquivos XML. O DBUnit irá gerenciar esses arquivos, fazendo todas as operações necessárias.

Chega de conversa e vamos criar um exemplo. Para isso crie um projeto Maven com o pom.xml abaixo:

Neste exemplo vamos criar dois casos de teste. O primeiro irá retornar carros zero km e outro com o período informado. Veja abaixo os casos de teste:

Vamos ver agora o que precisamos fazer para o DBUnit funcionar no nosso caso de teste. Primeiro vamos criar uma classe utilitária para iniciar a conexão com o banco de dados e um método que irá executar as operações SQL, como o INSERT e DELETE.

Reparou que o método execute recebe uma String? Esse é o nome do arquivo xml que contém os dados do banco de dados. Coloque o arquivo em src/test/resources/DbUnitXml com o conteúdo abaixo:

Agora já podemos inicializar na classe de teste. Veja a classe completa abaixo:

Veja que antes da execução de cada teste, todos os carros são removidos e depois inseridos novamente, de uma forma muito simples, com apenas um arquivo Carro.xml. Nesse mesmo lugar inicializamos o DAO com o EntityManager para testarmos as consultas.

Caso algum caso de teste altere o banco de dados, inserindo ou removendo dados, não irá atrapalhar em nada os outros, pois tudo sempre é refeito.

Não sei se você percebeu, mas dependendo do cenário essa exclusão e inserção pode ser muito demorada e você pode usar uma outra estratégia. Você pode simplesmente não apagar os dados entre os casos de teste e assim ganhar esse tempo mas, faça com bastante cuidado para não adicionar algum teste que possa corromper os dados.

Para aprender mais sobre JPA, Hibernate, DBUnit e jIntegrity, além de diversas outras tecnologias, conheça os cursos online da AlgaWorks, que são completos e substituem a necessidade de cursos presenciais.

Acesse ou baixe o código-fonte completo deste artigo no GitHub.

Instrutor da AlgaWorks. Graduado em Engenharia Elétrica pela Universidade Federal de Uberlândia e detentor das certificações LPIC-1, SCJP e SCWCD. Palestrante internacional, autor e co-autor de livros e instrutor de cursos de Java, JPA, TDD, Design Patterns, Spring, etc.

3 comentários sobre “Testes de integração com DBUnit

  1. Stélio Moiane -

    Oi Normandes,

    Olha eu tenho pesquisado muito a cerca de testes de integração e o meu maior dilema tem haver com a criação de cenários de teste. usando o DbUnit no inicio até funciona tudo bem mas dar manutenção do XML é muito tedioso.

    Encontrei ferramentas como fixture-factory da Amil consegui reduzir um pouco os meus problemas mas continuo insatisfeito.

    Tenho pensado em criar um framework que me possibiliter criar independencia total em cada teste mas que no entanto seja produtivo.

    O DbUnit é bom mas até um ponto.
    Parabens pelo post.

    Sucessos

  2. marcos -

    Olá Normandes,

    o JIntegrity funciona com qualquer banco de dados ou apenas com o mysql ? Pois eu ando a executar alguns testes de integração, obtive um imenso sucesso utilizando base de dados mysql, mas quando existe a mudança dele para um postgresql da vida, o mesmo me apresenta um erro me apontando que o jar do mysql não está no arquivo pom.xml.

    Não peço que me dê uma solução ao problema, apenas me dizendo em quais bancos ele dá o suporte.

    Abraços e ótimo trabalho

Deixe um comentário