| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 11:15:43
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
oi,
Estou usando JUnit4 + JMock, criei meu primeiro teste case parecido com isso
como eu faço para testar fakeList com o retorno do metodo dao.getLista(parametro)?
vi que tem uma forma de fazer isso usando assertThat mas não estou sabendo como usar
alguém pode me dar umas dicas??
Tks
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 16:45:00
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
oi,
será que alguém pode me ajudar com este teste??
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 16:52:42
|
Felagund
Forum Spammer
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
Membro desde: 26/07/2006 11:51:36
Mensagens: 1121
Localização: Santa e Bela Catarina
Online
|
não conheço o JMock, mas se vc usar o mockito ficaria mais ou menos assim
Quando vc usa um mock vc tem que simular o processamento desse metodo, tudo se torna ficticio, acredito que se vc quer testar o retorno de um DAO, não seja a maneira correta de fazer isso, até por que uma busca no BD dificilmente terá o mesmo efeito.
vc pode fornecer mais informações sobre seu teste?
|
att
Rafael Felix
Rolling With Code |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 17:13:49
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
oi,
eu tenho um método de um dao que retorna um HashMap, eu quero testar o retorno dele, não sei se preciso criar uma lista fake e pegar o retorno da chamada do DAO e comparar... talvez eu precise apenas testar o número de registros esperados e não o retorno ??
achei o exemplo abaixo
http://i-proving.ca/space/Mike+Wilkes/blog/2009-06-24_1?showComments=true
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 17:22:28
|
Felagund
Forum Spammer
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
Membro desde: 26/07/2006 11:51:36
Mensagens: 1121
Localização: Santa e Bela Catarina
Online
|
cara depende muito, esse seu map terá sempre o mesmo retorno para uma entra x?
uma classe pode ser testada (me corrigam se estiver errado) somente se o metodo Y com uma entrada X retorne Z e Z seja o que eu espero
no caso tempos
digamos que Z seja o sobrenome, e X o nome, nossa função Y retorna o sobrenome de uma pessoa nesse caso para o meu nome "Rafael Felix" teria que retornar Felix passando rafael
ou
Essa é a essencia de um teste, vc tem que ter uma entrada definida e um retorno esperado para tal, se seu map vai retornar sempre com 3 elementos por exemplo ele pode ser testado, mas somente seu tamanho não seu conteudo, o que ao meu ver é um teste bem fraco.
|
att
Rafael Felix
Rolling With Code |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 17:38:29
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
oi,
o método do DAO retorna um HashMap que pode ser variável dependendo do parâmetro que no caso é apenas um Float
usando Junit eu sempre usei a sintaxe testando se a lista tem o mesmo tamanho e também comparando o conteúdo, algo como
na verdade a minha dúvida é com relação à sintaxe do Jmock
também tenho dúvidas se seria necessário fazer o teste da forma como falei acima
abs
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 19:10:43
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
oi,
agora eu consegui fazer o seguinte
mas estou tendo uma exception
Fiz a declaração dos objetos em
estou usando JUnit4 e JMock 2.5.1
abs
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 19:44:06
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
oi,
importei o jar que faz a integração entre o JMock e o JUnit jmock-junit4-2.5.1.jar para o classpath do projeto
tb anotei a classe com @RunWith(JMock.class)
o erro está acontecendo já qdo eu tento retornar a lista do mockDAO
alguém pode me dar uma ajuda, esse erro é bem genérico e não ajuda muita coisa.
abs
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 07:58:13
|
Felagund
Forum Spammer
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
Membro desde: 26/07/2006 11:51:36
Mensagens: 1121
Localização: Santa e Bela Catarina
Online
|
André, vc não deve criar um Mock da classe sendo testada, os mocks são para outras classes auxiliares.
Por exemplo se o objeto meuDao retorna um objeto do tipo MeuObjeto e vc quer comparar o campo nome de MeuObjeto retornado.
ai vc faz um Mock de MeuObjeto com o getNome retornando o esperado.
meuDao vai manter seu processamento normal.
|
att
Rafael Felix
Rolling With Code |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 08:50:49
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
Felagund wrote:André, vc não deve criar um Mock da classe sendo testada, os mocks são para outras classes auxiliares.
Por exemplo se o objeto meuDao retorna um objeto do tipo MeuObjeto e vc quer comparar o campo nome de MeuObjeto retornado.
ai vc faz um Mock de MeuObjeto com o getNome retornando o esperado.
meuDao vai manter seu processamento normal.
oi,
desculpe, não entendi direito
quer dizer que eu tenho que mockar a classe DAO e tb o retorno da chamada do método?
tks
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 10:07:31
|
Felagund
Forum Spammer
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
Membro desde: 26/07/2006 11:51:36
Mensagens: 1121
Localização: Santa e Bela Catarina
Online
|
André Fonseca wrote:
Felagund wrote:André, vc não deve criar um Mock da classe sendo testada, os mocks são para outras classes auxiliares.
Por exemplo se o objeto meuDao retorna um objeto do tipo MeuObjeto e vc quer comparar o campo nome de MeuObjeto retornado.
ai vc faz um Mock de MeuObjeto com o getNome retornando o esperado.
meuDao vai manter seu processamento normal.
oi,
desculpe, não entendi direito
quer dizer que eu tenho que mockar a classe DAO e tb o retorno da chamada do método?
tks
Seguinte André, vc tem que mockar somente outros objetos, me parece que vc quer testar o retorno do meuDao.
Se é o retorno do metodo X de meuDao que vc quer testar, vc não pode fazer o mock de meuDao, a instancia de meuDao deve ser verdadeira, somente desse modo vc consegue testar.
Quando vc cria um mock, vc tem que dizer o retorno de cada metodo para conseguir testar.
|
att
Rafael Felix
Rolling With Code |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/02/2010 13:09:54
|
YvGa
JavaGuru
Membro desde: 07/03/2007 15:58:16
Mensagens: 298
Offline
|
Felagund wrote:
Se é o retorno do metodo X de meuDao que vc quer testar, vc não pode fazer o mock de meuDao, a instancia de meuDao deve ser verdadeira, somente desse modo vc consegue testar.
Sim, se voce quer testar o meuDAO nao faz sentido fazer um mock dele, pois voce estaria testando o mock e nao ele.
Supomos que voce tenha uma classe ServiceVenda no metodo processarVenda(), dentro desse metodo voce vai verificar se o cliente tem saldo disponivel para a compra. Para isso voce vai ter que ir ate o banco de dados e buscar as informacoes da conta do cliente, utilizando um clienteDAO, ou qqr coisa assim, é esse clienteDAO que o ServiceVenda vai utilizar que voce vai ter que mockar.
Nesse caso voce diz que ao executar o metodo processarVenda(), o metodo buscarCliente do clienteDAO sera invocado uma vez (oneOf) e vai retornar will(returnValue) o objeto clienteComSaldoInsuficiente, depois dentro do metodo processarVenda voce pode usar o clienteComSaldoInsuficiente para testar o resto do metodo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/02/2010 22:45:33
|
André Fonseca
Forum Spammer
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 1521
Online
|
hmm, acho que entendi..
como eu não conheço muito de mocks - ainda preciso ler aquele artigo do Fowler - eu achei que a utilidade dos objetos mocados era resolver qualquer tipo de dependência externa
pelo exemplo que você colocou fica claro que a finalidade do TestCase é testar o método de negócio e não o DAO, ou seja, se eu tiver uma estrutura de objetos parecida com esta abaixo
TestCase
Business - objeto real sendo testado
Facade - mockar
DAO - mockar
eu só irei mockar aquilo que foge do objetivo do teste, correto isso??
vlw pela ajuda
|
Você é novo no GUJ?
Como fazer perguntas?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 22:21:07
|
YvGa
JavaGuru
Membro desde: 07/03/2007 15:58:16
Mensagens: 298
Offline
|
André Fonseca wrote:hmm, acho que entendi..
como eu não conheço muito de mocks - ainda preciso ler aquele artigo do Fowler  - eu achei que a utilidade dos objetos mocados era resolver qualquer tipo de dependência externa
pelo exemplo que você colocou fica claro que a finalidade do TestCase é testar o método de negócio e não o DAO, ou seja, se eu tiver uma estrutura de objetos parecida com esta abaixo
TestCase
Business - objeto real sendo testado
Facade - mockar
DAO - mockar
eu só irei mockar aquilo que foge do objetivo do teste, correto isso??
vlw pela ajuda 
Isso mesmo. Voce aumentaria muito o custo dos testes se tivesse que acessar o banco de dados toda vez que fosse testar seu metodo, e aumentaria sem necessidade porque o que voce esta testando não é o acesso ao banco. Nesses casos voce usa o mock.
|
|
|
 |
|
|