Validacao de objeto mock...  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

Alguem conhece uma forma mais simples de assegurar que o metodo de um objeto mock seja chamado corretamente?

Queria saber se existe alguma forma mais direta, que nao necessite criar custom matchers como esse:



O metodo matchesSafely() acima verifica se o mock geoFixer.save(fix) foi chamado corretamente:



É normal criar custom matchers para esses casos ou existe uma solucao melhor?

This message was edited 1 time. Last update was at 16/03/2008 15:44:27

[Email]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

dá uma olhada, e vê se isso te ajuda:

http://blog.caelum.com.br/2008/03/17/testes-unitarios-com-jmock-2/


--
Caelum
www.caelum.com.br

cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

Baseado no exemplo do seu artigo...

Supondo que fosse LucasLoginLogic e o objeto User fosse criado internamente:


Não bastaria esperar qualquer user: one(session).setAttribute("user", with(any(User.class)));

Como garantir que o objeto passado fosse User("lucas", "123", false, true)?
[Email]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

se o seu método equals() foi sobrescrito corretamente, você pode fazer o seguinte:



o teste só vai passar se o usuário passado pra sessão for equals() ao user que vc passou.

--
Caelum
www.caelum.com.br

cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

lucascs wrote:se o seu método equals() foi sobrescrito corretamente, você pode fazer o seguinte:



o teste só vai passar se o usuário passado pra sessão for equals() ao user que vc passou.


Acontece que User é uma entidade do meu dominio e portanto equals não se aplica aos seus valores mas ao id do usuario, como o objeto User no meu caso nem foi salvo no repositorio ainda ele sera sempre false na comparacao com qualquer outro objeto User (seu id é 0).

Sem querer ser chato, apenas buscando uma solucao melhor

editado: e criar um metodo no objeto para fazer essa comparacao nao acho muito adequado por ser uma exigencia de teste afetando um objeto do meu sistema.

This message was edited 1 time. Last update was at 18/03/2008 10:07:45

[Email]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline

então... acontece que geralmente vc não vai instanciar o User direto dentro da sua classe
(vc estiver fazendo isso significa que sua lógica está com alto acoplamento)...

ou seja... ao inves de instanciar o user, vc passa ele como parâmetro da lógica:



daí vc pode passar um user com o id setado, e vai dar true no método equals...

e se sua lógica acessa o banco de dados, mocka o banco de dados também (de novo vc tem que receber
o objeto do banco - Dao ou whatever - por injeção de dependência...

o ponto é que as suas classes às vezes tem que ser modificadas para serem testadas... injeção de dependência
e inversão de controle se aplicam a esse caso, e é sempre bom fazer isso...

[]'s

--
Caelum
www.caelum.com.br

 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team