Teste de integração
02/04/2013 02:13
0
Boa noite. Buscando maior conhecimento sobre o Grails e seguindo um exemplo do livro Grails in action, surgiu uma dúvida.
Gostaria de compreender porque o segundo teste apresenta o seguinte erro:
No signature of method: br.com.hubbub.domain.User.save() is applicable for argument types: () values: [] Possible solutions: save(), save(boolean), save(java.util.Map), wait(), last(), any()


Sendo que o primeiro funciona normalmente.

Segue o código de teste:
class PostIntegrationTests extends GrailsUnitTestCase{

void testFirstPost(){
def user = new User(userId: 'Carlos', password: 'secret').save()

def post1 = new Post(content: 'Primeiro')
user.addToPosts(post1)

def post2 = new Post(content: 'Segundo')
user.addToPosts(post2)

def post3 = new Post(content: 'Terceiro')
user.addToPosts(post3)

assertEquals(3, User.get(user.id).posts.size())
}



void testAccessingPost(){
def user = new User(userId: 'Victor', password: 'secret2').save()

user.addToPosts(new Post(content: 'Primeiro'))
user.addToPosts(new Post(content: 'Segundo'))
user.addToPosts(new Post(content: 'Terceiro'))

def foundUser = User.get(user.id)

def postNames = foundUser.posts.collect {it.content}

assertEquals(['Primeiro', 'Segundo', 'Terceiro'], postNames.sort())
}
}
Tags: teste, integracao, grails, exception


0
Olha eu de novo!

Inseri a seguinte linha de código antes da execução de cada teste:
mockDomain(User)


E funcionou!

Neste link tem um tutorial sobre o assunto
http://www.ibm.com/developerworks/java/library/j-grails10209/

mas ainda não compreendi por que isto funciona.

Antes se eu testar uma de cada vez, as duas terão sucesso. Apenas quando coloco ambas para executarem ordenadamente que este erro ocorria. Achei muito estranho isso. Se alguém já passou por isso e puder me explicar melhor. Pensava que o Mock era epenas para testes unitários.

Agradeço as respostas.


0
Oi Eduardo,

o método mockDomain injeta na sua classe de domínio todos os métodos de persistência que são usados em tempo de execução, como save, delete, etc.

Ele é usado para simular a existência de um banco de dados em tempo de execução no modo de teste unitário que é executado com o sistema todo desligado.

Por si, como as classes de domínio não extendem nenhuma outra classe, estes métodos naturalmente não existem. Só existem quando o framework os injeta através do atributo metaClass da classe.


0
Kico, mas ele não é útil, neste sentido que disse, nos testes unitários? O que não ficou claro para mim é que em um teste de integração eu tenho a minha aplicação rodando, portanto deveria ter acesso a estes valores. O que me estranhou mais ainda foi que o segundo def test não funcionava até inserir o mockDomain, e o primeiro sim, mas são praticamente idênticos! Este ponto que não consegui compreender ainda o por que! rs

Mas obrigado pela contribuição, seu post no blog foi bastante útil!

Abraço.


0
Olá, Eduardo.

Depende de como você executou o teste. Por padrão o teste executado é teste unitário. Dai realmente precisa configurar Mocks. Para executar testes de integração precisa do parâmetro -integrationcada vez que executar o test-app.

Ex 1:
test-app com.pacote.teste.TuaClasseTeste // executará teste unitário (precisa de mocks)

Ex 2:
test-app -integration com.pacote.teste.TuaClasseTeste // executará teste de integração (não precisa de mocks e usará tua configuração "test" do DatataSource.groovy)

Abraços.


0
Depende de como você executou o teste. Por padrão o teste executado é teste unitário. Dai realmente precisa configurar Mocks. Para executar testes de integração precisa do parâmetro -integrationcada vez que executar o test-app.


Esta é a forma que estou executando mesmo.

Vou tentar compreender o por que disto ter ocorrido, no caso de dois testes seguidos, o segundo falhar, mesmo sabendo que está correto. rs
E para que isso não acontecesse eu inseri o comando
mockDomain(myClass)
e funcionou (em um teste de integração)!

Mas, Yoshi, obrigado pela sua resposta!



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto