Testes que envolvem bancos de dados são geralmente trabalhosos, pois é necessário configurar o estado do banco antes de cada teste, montando scripts para populá-lo e comparar seus registros (tarefas que podem demandar conhecimentos profundos em SQL). O DbUnit oferece uma alternativa aos testes manuais, e apresenta uma forma elegante de resolver esses problemas através de diversas funcionalidades que facilitam a vida do desenvolvedor.

Testes e dados

Como sabemos, os testes representam uma etapa fundamental no desenvolvimento de qualquer software, e nessa etapa as atividades de teste de unidade são sem dúvida as mais conhecidas. Em aplicações Java, testes de unidade são geralmente criados e executados com auxílio de frameworks de testes, a exemplo do JUnit. Apesar de contribuir bastante na execução de testes, o JUnit oferece apenas funcionalidades básicas de teste, como os métodos assertXYZ(). Validações mais elaboradas ou mais específicas não estão presentes como, por exemplo, aquelas referentes a banco de dados.

A utilização de um SGBD, assim como de qualquer outro sistema externo ou auxiliar, exige que testes específicos sejam realizados. Isso implica em verificar se os dados do sistema são gravados e recuperados de forma correta. Verificações desse tipo nem sempre são simples, pois podem exigir codificação extra em SQL ou a criação de diversas classes auxiliares. Por conta disso, a maioria das verificações de banco de dados é feita manualmente, o que propicia erros e impede uma automatização total do processo.

DbUnit

O DbUnit é uma extensão do JUnit que oferece funcionalidades específicas para testes envolvendo banco de dados. O framework possui métodos específicos para comparação de registros, e facilita a carga de registros e a “limpeza” do banco (por exemplo, depois de executar um teste que faça inserções de dados). Essas facilidades permitem configurar a base de dados no estado desejado para cada teste.

O DbUnit se fundamenta em três conceitos principais: IDatabaseConnection, IDataSet e DatabaseOperation.

IDatabaseConnection

A interface IDatabaseConnection representa uma conexão com o banco de dados através de JDBC. O DbUnit oferece suporte a conexões simples através da classe DatabaseConnection ou conexões de Datasource através da classe DatabaseDataSourceConnection.

IDataSet

A interface IDataSet representa um conjunto de dados separados logicamente em tabelas. As principais operações do framework são executadas sobre essa interface, e as abstrações são relativamente simples: linhas, colunas, registros etc.

Os conjuntos de dados podem ser originários de praticamente qualquer repositório, e o DbUnit já traz diversas implementações prontas de IDataSet, algumas das quais são exibidas na Tabela 1 (a utilização dessa interface será demonstrada posteriormente).

Tabela 1. Principais implementações de IDataSet.
...
Implementação Descrição

DatabaseDataSet

Representação das tabelas do banco de dados.

QueryDataSet

Representação de um conjunto de dados resultante de uma consulta.

FlatXmlDataSet

Representação de um conjunto de dados através de um arquivo XML. Cada elemento representa uma tabela e cada atributo, uma coluna.

XlsDataSet

Quer ler esse conteúdo completo? Tenha acesso completo