
0

0
19/07/2011 17:10
Oi ivgsilva,
saca este trecho:
void testSegundo(){
def userTest = new Usuario().save()
def coment1 = new Atendimento(descricao: "Primeiro ... W00t!")
userTest.addToAtendimentos(coment1) // linha 27: diz que o metodo .addToAtendimentos não pode ser incocado.
def coment2 = new Atendimento(descricao: "Segundo ... W00t!")
userTest.addToAtendimentos(coment2)
def coment3 = new Atendimento(descricao: "Terceiro ... W00t!")
userTest.addToAtendimentos(coment3)
assertEquals 3, Usuario.get(userTest.id).recados.size()
}
o método save() não retorna um novo objeto, ele apenas persiste a sua instancia de Usuario no banco de dados.
Sobre testes com Grails, já escrevi alguma coisa a respeito no meu blog que talvez te ajude.
http://www.itexto.net/devkico/?p=913
Henrique Lobo Weissmann (Kico)
Pontos: 2586

0

0
19/07/2011 20:29
Já havia lido este texto seu texto Henrique. Eu estava testando os exemplos do livro 'Grails in Action'. Lá ele destaca que o save() retorna true quando consegue concluir a operação.
No testSegundo() vc sabe me dizer porque o teste (addToAtendimentos(coment1)) não funciona ?
ivgsilva
Pontos: 182

0

0
20/07/2011 08:56
Oi ivgsilva, sei sim.
É porque o método save() sempre te retorna uma instância de Boolean, que não possui o método addToAtendimentos.
O método addToAdentimentos, pelo que pude observar no seu código, está presente na classe Usuario que você mesmo desenvolveu.
Vou comentar o seu código:
def userTest = new Usuario().save()
Neste primeiro passo, você definiu o valor da variavel userTeste como sendo do tipo Boolean (o método save() de uma classe de domínio sempre retorna um boolean, seja ele true ou false)
def coment1 = new Atendimento(descricao: "Primeiro ... W00t!")
Ok, nada de errado na criação do novo comentario
userTest.addToAtendimentos(coment1) // linha 27: diz que o metodo .addToAtendimentos não pode ser incocado.
Yeap, aqui você vai ter o erro, porque a classe Boolean não possui este método. Se você reescrevesse a sua primeira linha de código para algo como o código abaixo, no entanto, funcionaria.
def userTest = new Usuario()
sacou? Qualquer coisa, to ai!
Henrique Lobo Weissmann (Kico)
Pontos: 2586

0

0
20/07/2011 23:09
Henrique muito obrigado pela sua explicação. Esta me ajudando a entender melhor o Grails.
realmente com relação ao testSegundo() sua dica fez o teste avançar.
Gostaria de aproveitar e fazer mais 2 perguntas:
1) Porque o comando "assertEquals 3, Usuario.get(userTest.id).atendimentos.size()" não funciona? Tentei substituir o size() por count() porém também não funcionou. Onde esta o erro nesta linha?
2) Porque o comando "assertNotNull userTest.save()" retorna NULL? tentei substitui-lo pelo comando "assertNotNull userTest.id" porém também não funcionou? Pensei que fosse porque o objeto encontrava-se vazio e tentei incluir "userTest.nome = 'Fulano'", mas deu erro com a mensagem que o objeto é nulo. Daí não entendi mais nada.
Eu vou migrar meus testes para a metodologia que você ensina em seu blog, porém eu fiquei com curiosidade em saber o porque que este comandos apresentaram estas falhas visto que eles foram ensinado no "Grails in Action".
Obrigado pela ajuda Henrique.
ivgsilva
Pontos: 182

0

0
21/07/2011 09:03
Oi ivgsilva, bom: vamos lá!
Sobre a pergunta 1.
Há uma razão para isto: ou realmente não há 3 atendimentos no banco de dados ou não foi encontrado um usuário com o id que você passou.
Sobre a pergunta 2
Como disse, o método save() retorna pra você um valor booleano. Verificar se é não nulo, é portanto bobagem. Tente algo como
assertTrue userTest.save()
Qualquer coisa, to ai.
Grande abraço!
Henrique Lobo Weissmann (Kico)
Pontos: 2586