Problemas com teste unitário de controlador
01/02/2010 00:00
0
Pessoal,

Estou tentando fazer os testes unitários para um determinado controlador, eu já tentei testar usando o mock do plugin de teste, mas ao salvar ele não "mocka" as constraints nem as dependências da classe de domínio.

Alguém alguém conhece uma boa técnica para criar o teste unitário para o método save de um controllador com um domínio que contém várias dependências e constrainsts?
Tags: Grails


0
para o Controllers o ideal é utilizar testes de integração
01/02/2010 00:00


0
Creio que é um argumento válido dentro que no controller utilizamos vários componentes, mas quando temos que testar os próprios métodos dos controladores creio que seja válido testá-los unitariamente.
01/02/2010 00:00


0
seu controller está utilizando algumas tarefas complexas? será que parte disso não deveria estar num Service?
01/02/2010 00:00


0
[quote="vinci"]seu controller está utilizando algumas tarefas complexas? será que parte disso não deveria estar num Service?[/quote]

Não é nenhuma tarefa complicada ^^. O problema é que o meu domínio tem algumas dependências, ou seja, o domínio se relaciona com outros, e isto é o que está atrapalhando o teste.
01/02/2010 00:00


0
ainda está me parecendo rasoável implementar um Service.

até por que me parece que você vai querer alguma configuração transacional para salvar todo o domínio suas dependências...

Testar o controller, em tese, significa testar os redirecionamentos
01/02/2010 00:00


0
[quote="vinci"]ainda está me parecendo rasoável implementar um Service.

até por que me parece que você vai querer alguma configuração transacional para salvar todo o domínio suas dependências...

Testar o controller, em tese, significa testar os redirecionamentos[/quote]

Todo Domain tem uma dependência, ou seja, é ligada a outra classe, por exemplo suponha que em seu modelo vc esteja querendo testar o domain Casa, mas para a casa ser salva ela necessita ter um dono, ou seja, é necessário que uma pessoa exista, o meu problema está nessas dependências quando salva. Não existe algum mock para isso?
01/02/2010 00:00


0
Relacionamentos bidirecionais... eu fujo disso com força

Insisto que o Service é o cara ideal para realizar validações como esta de verificar se a pessoa existe.

Dado que seu Service está implementado e testado, você pode criar um mock para seu service e testar o Controller.
01/02/2010 00:00


0
Mas digamos que eu queira mockar um domain como dependência de outro, é possível?
01/02/2010 00:00


0
ainda não fiz isso, mas acredito que o mockFor(domain) deve funfar...

<!-- m --><a class="postlink" href="http://www.grails.org/Testing+Plugin">http://www.grails.org/Testing+Plugin</a><!-- m -->
01/02/2010 00:00


0
É justamente esse plugin que estou usando. Estou procurando nele uma forma de conseguir mockar as dependencias de um domínio.
01/02/2010 00:00


0
A solução é criar na &quot;tora&quot; um método para &quot;mockar&quot;, uma vêz criado servirá para todos os testes.
22/02/2010 00:00


0
não entendi. Pode mostrar código?
22/02/2010 00:00


0
[quote=&quot;vinci&quot;]não entendi. Pode mostrar código?[/quote]

Resumindo,

É só preencher o contrutor do objeto, é um simples new


def objeto = new Object(
param1 &#58; &quot;abc&quot;
param2 &#58; &quot;xyz&quot;
)


Ou seja, vc cria um método que o preencha o objeto automaticamente. Pensei que o Grails oferecia essa facilidade. <!-- s:cry: --><img src="{SMILIES_PATH}/icon_cry.gif" alt=":cry:" title="Crying or Very sad" /><!-- s:cry: -->
25/02/2010 00:00


0
Para testar logica de controller do Controller( <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> ) o melhor é o teste unitário. Geralmente o mockDomain basta, mas se o metodo realizar coisas complexas com muitas classes de dominio voce pode fazer algo assim para abstrair a lógica que nao te interessa naquele teste:

Controller {
def actionComplexa = {
if(Pessoa.metodoComplexoComMuitasDeps(params))
render('fail')
else
render('win')
}
}


Tests

void testWin(){
Pessoa.metaClass.static.metodoComplexoComMuitasDeps = { i -> return true; }
controller.actionComplexa()
assertEquals 'win', controller.renderArgs.view
}

void testFail(){
Pessoa.metaClass.metodoComplexoComMuitasDeps = { i -> return false; }
controller.actionComplexa()
assertEquals 'fail', controller.renderArgs.view
}


Acho que é isso que voce chamou de 'Tora'. É o jeito que eu uso nesses casos mais complexos.
27/02/2010 00:00



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