Sobre DBunit:
DbUnit é uma extensão do Junit
Destinado a projetos que utilizam banco de dados
Deixa sua Base em um estado conhecido entre a execução dos testes unitários
È uma solução para os problema que podem ocorrer quando casos de teste corrompem a Base, causando falhas nos testes subsequentes
Tem habilidade de exportar e importar os dados da Base em XML
The Problem is ...
Você tem uma Banco de dados SQL
Algumas stored procedures, ou não : )
Camada de código situada entre sua aplicação e o Banco de dados.
The Question is ...
Como ter certeza que seus testes unitários estão lendo e escrevendo dados corretamente.
Alguns pontos
Um bom conjunto de teste é aquele que é auto-suficiente e cria todo os dados necessários ( o que fazemos hoje ! )
Os testes podem ser simplificados se você conhecer o estado da Base antes de executar os testes
Deletar e Inserir dados em todos os testes gasta muito tempo. Concordam ???
Provável solução
Preciso mais de um Banco de dados:
Banco de dados do desenvolvedor
Banco de dados dos testes unitários
Banco de dados dos testes de integração
Provável problema
Com múltiplos bancos, você precisa garantir o sincronismo da estrutura
Caso altere uma tabela, terá que replicar a alteração nas outras bases
Solução DBunit
Solução elegante para controlar a dependência entre o banco e sua aplicação
Permite desenvolvedores gerenciar o estado do banco sobre os testes
O banco pode ser populado com dados antes dos testes unitário serem executados
O banco pode retorna para o estado pre – teste unitário
Instalação
Download do framework no site
http://dbunit.sourceforge.net
Importa o .jar para sua IDE
DataSet
Os testes unitário precisam de dados no banco para trabalharem
Você precisa de um dataset (Coleção de dados)
Criar manualmente um xml dataset
Exportar dados existentes do Banco
Criar um classe que extenda DatabaseTestCase
Criar metodos:
getConnection()
getDataSet()
setUp() and tearDown()
Momento para garantir um estado no banco
Pré teste
Pós teste
protected void setUp() throws Exception {
DatabaseOperation.REFRESH.execute(getConnection(), getDataSet());
}
protected void tearDown() throws Exception {
DatabaseOperation.REFRESH.execute(getConnection(), getDataSet());
}
Database Operation
Operação | Decrição |
DatabaseOperation.UPDATE | Atualiza o banco com o conteúdo do dataset. Assume que os dados a serem atualizados existam no banco, caso contrário ocorrerá erro. |
DatabaseOperation.INSERT | Insere no banco o conteúdo do dataset. Assume que os dados a serem insereridos não existam no banco, caso contrário ocorrerá erro. |
DatabaseOperation.DELETE | Deleta do banco somente o conteúdo do dataset. |
DatabaseOperation.DELETE_ALL | Deleta do banco todo conteúdo |
DatabaseOperation.TRUNCATE | Truncate tables present in the specified dataset. If the dataset does not contains a particular table, but that table exists in the database, the database table is not affected. Table are truncated in reverse sequence. |
DatabaseOperation.REFRESH | Atualiza ou insere no banco o conteúdo do dataset. Caso o dado foi modificado ele faz um update, caso o dado não exista ele faz um insert. |
DatabaseOperation.CLEAN_INSERT | Faz um DELETE_ALL e depois um INSERT. |
DatabaseOperation.NONE | Não faz absolutamente nada |
Conclusão
DbUnti possui habilidade para gerência o estado do banco sobre o ciclo de vida do teste unitário
Permite abstrair o estado do banco, assim tornando rápido e fácil a criação de testes unitários
1 comment:
Muito boa a explicação sobre o DBUnit. me tirou de um sufoco grande aqui valeu!!
Post a Comment