É aceitavel que os testes interfiram no design do código?  XML
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Autor Mensagem
magnomp
JavaBaby

Membro desde: 21/07/2009 12:43:00
Mensagens: 77
Offline

Estou desenvolvendo uma aplicação web usando Mentawai...
Preciso escrever testes para uma Action que possui alguns atributos privados que são instancias dos meus repositorios...
ex:



Em produção, posso usar o recurso de injeção de dependencias do menta para instanciar o repositorio e colocar na minha variável de instancia clienteRepositorio.
Mas em ambiente de testes, preciso colocar ali um "mock" do repositório. Pensei em em aumentar a visibilidade da variável (package ou protected), e no teste eu coloco algo ali manualmente... Ex:


Aí vem minha dúvida: Eu faria essa mudança meramente para viabilizar os testes. Isso deveria ser evitado, na opinião de vcs?
Recomendam alguma outra alternativa?
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20576
Localização: Curitiba/PR
Offline

Por que não usa os recursos de injeção de dependencia do menta para injetar o mock durante os testes?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Rubem Azenha
GUJ Master
[Avatar]

Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline

ViniGodoy wrote:Por que não usa os recursos de injeção de dependencia do menta para injetar o mock durante os testes?


Por que infelizmente não é tão simples assim usar os recursos de injeção de dependência do menta fora de forma "standalone".
O jeito é criar um setter (não é muito legal, mas ninguém vai morrer por causa disso).



Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
[WWW]
Ferryman
JavaGuru
[Avatar]

Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline

É aceitável sim.

O argumento que eu sempre uso quando me fazem essa pergunta é: Para testar, o código precisa estar desacoplado (usar DI etc). Se ele não está desacoplado, fica difícil de testar, portanto, se você não consegue fazer o teste, significa que seu código precisa de um refactoring.

TDD ajuda muito nesse ponto, pois se você escreve seu teste primeiro, obrigatóriamente vai estar escrevendo código testável.

[]s

Rafael Farias Silva (@rafaferry)

Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner
[Email] [WWW]
Jair Rillo Junior
Moderador
[Avatar]

Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline

Você pode "injetar" como o Rubens disse, criando um método set e no seu teste unitário injetando o mock por ele. Eu particularmente uso muito esse approach.

Outra solução (porém na minha opinião é pior) é criar uma Factory para te retornar esse Repositório, assim, no seus testes, quando a Action chamar a Factory, ela retorna o Mock para você.

Jair Rillo Junior

http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate
Jorge Diz
JavaChild

Membro desde: 13/03/2008 09:39:28
Mensagens: 104
Offline

Ferryman wrote:É aceitável sim.

O argumento que eu sempre uso quando me fazem essa pergunta é: Para testar, o código precisa estar desacoplado (usar DI etc). Se ele não está desacoplado, fica difícil de testar, portanto, se você não consegue fazer o teste, significa que seu código precisa de um refactoring.

TDD ajuda muito nesse ponto, pois se você escreve seu teste primeiro, obrigatóriamente vai estar escrevendo código testável.

[]s


+1

Eu sou mais enfático: o termo "aceitável" passa a idéia de que vc está fazendo algo que geralmente
é errado mas que pode ser relevado em certos casos.

Para mim, o design deve necessariamente incluir ganchos para o teste ser feito de maneira simples
e eficaz.

Não é apenas aceitável, é fundamental.

[]s

Jorge Diz

 
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Ir para:   
Powered by JForum 2.1.8 © JForum Team