| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/03/2008 15:44:02
|
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2008 22:24:59
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2008 23:36:36
|
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)?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/03/2008 08:44:53
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/03/2008 10:04:49
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/03/2008 10:32:41
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
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
 |
|
|
 |
|
|