Вы находитесь на странице: 1из 5

Teste de Software

Testando classes DAOs com Inversão de Controle

O diagrama de classes abaixo apresenta a classe ClienteDAO como dependente das classes
Cliente e ConectaBanco. A classe ConectaBanco fornece uma instância de Connection (java.sql)
para a execução dos comandos SQL.

Exemplo do Uso de dependência

Prof. Wolley W. Silva


Teste de Software

Como pode ser visto no trecho código acima, uma instância de Connection é obtida localmente
dentro do método cadastrar. Seguindo este padrão, os demais métodos (listar, atualizar,
excluir e consultaPorId) também necessitarão de uma instância local do mesmo objeto.

Esta prática cria um vinculo forte entre o ClienteDAO e sua dependência, a classe de conexao.
Este acoplamento dificulta a flexibilidade do nosso código em situações onde se queira alterar
a fonte ou forma de conexão (com outros bancos de dados, MySQL por exemplo) e
principalmente a TESTABILIDADE da classe, isto é, sua facilidade de ser testada.

É comum em testes de classes DAOs a necessidade de se controlar as transações com o banco


de dados, iniciando-a para a execução dos testes e ao final executando um rollback. Para que
isto seja possível, vamos utilizar uma boa prática de programação chamada Inversão de
Controle.

• Inversão de Controle (Inversion of Control - IoC)

– Os objetos não criam sua dependência, mas agora devem apenas recebê-las
de alguém;

– Os objetos (dos quais dependemos) são passados já inicializados e preparados


para uso;

Prof. Wolley W. Silva


Teste de Software

1. Alterando a classe ClienteDAO


a. Vamos criar um atributo privada do tipo Connection. A declaração de atributos
com final significa que a o valor do atributo não pode ser alterado dentro da
classe;
b. Criar um novo construtor para receber a conexão como dependência
c. Alterar o método cadastrar removendo a instância local para utilizar a
dependência recebida no construtor

Exemplo de código

2. Alterando a classe de teste ClienteDAOTest


a. Cria um atributo privado do tipo ClienteDAO
b. Criar um outro atributo privado do tipo Connection
c. No método de inicialização (anotado com @Before), criar a instância de
conexão;
d. Ainda no método de inicialização, definir o atributo autoCommit da conexão
como false;
e. Passar a instância de conexão para o ClienteDAO no seu construtor;
f. No método de finalização (anotado com @After), fazer o rollback na conexão;

Prof. Wolley W. Silva


Teste de Software

Criação e inicialização dos objetos

Método de teste

Prof. Wolley W. Silva


Teste de Software

Resultado do teste

Exercício

 Faça as alterações necessárias na classe ClienteDAO para os demais métodos, listar,


atualizar, consultarPorId e excluir;
 Implemente os testes para cada um dos métodos da classe ClienteDAO;

Prof. Wolley W. Silva

Вам также может понравиться