Artigo Java Magazine 37- Testes sob Controle, com Mock Objects

Artigo publicado pela Java Magazine 37.

Esse artigo faz parte da revista Java Magazine edição 37. Clique aqui para ler todos os artigos desta edição

 

 

Clique aqui para ler todos os artigos desta edição

 

Testes sob Controle, com Mock Objects

Isolando testes e controlando dependências com objetos substitutos

Conheça na prática uma técnica que permite deixar seus testes mais auto-contidos e gerenciáveis, e use a ferramenta open source EasyMock

Processos ágeis como o Extreme Programming vêm popularizando o conceito de automação de testes, sobretudo através do uso de testes de unidade. Mas estes testes, embora sejam bastante úteis para manter a boa saúde de um software, freqüentemente são difíceis de serem criados.

Testes de unidade procuram testar classes isoladamente. Classes em um sistema normalmente alcançam seus objetivos com a ajuda de outras classes; não funcionam isoladamente, freqüentemente se comunicando com outros elementos da aplicação. Quando construímos um teste de unidade, um dos principais desafios é exatamente isolar a classe sendo testada, para que nenhuma outra seja envolvida no teste. Para compreender o problema, vejamos um pequeno exemplo.

Exemplo de dificuldade para testar classes isoladamente

Imagine que estivéssemos desenvolvendo um software para automatizar as operações de um restaurante. Entre as muitas funcionalidades desse sistema, uma essencial seria a geração da conta. Uma conta típica tem muitas características, mas iremos nos preocupar apenas com a mais importante: o total a ser pago. Como exemplo, iremos implementar um teste para validar se o total da conta está sendo calculado corretamente.

Nossa classe Conta foi modelada de acordo com o diagrama apresentado na Figura 1.

 

Figura 1. Classes usadas para modelar uma conta.

A impressão de uma conta, como pode ser observado na Figura 2, é composta por linhas, onde cada linha indica um item, sua quantidade, e o preço total (quantidade de itens da linha multiplicada pelo preço unitário do item). Um item, por sua vez, possui um nome e um preço unitário. Na parte inferior da impressão da conta é apresentado o valor total a ser pago, que é, como esperado, o somatório do total de cada linha.

 

Figura 2. Exemplo de impressão de conta.

Na Listagem 1, você encontrará o teste criado, bem como a respectiva classe Conta, cujo método total() desejamos testar. Note que as outras duas classes modeladas precisaram ser usadas durante a criação do teste: LinhaItem e Item. Isso tornou o método de teste maior, mais complexo e mais demorado de ser implementado. Além disso, essa forma de confeccionar o teste faz com que não seja verdadeiramente um teste de unidade, pois a classe " [...] continue lendo...

Artigos relacionados