Erro na combinação GMock(0.8.1) + Testes de Controlador(Grails 2.2.0)

Updated . Posted . Visible to the public.

Ao escrever os testes de unidade para o Serviço Banco de Arquivos, me deparei com a seguinte exceção nos testes que utilizam o GMock:

groovy.lang.MissingMethodException: No signature of method: org.gmock.internal.metaclass.MockProxyMetaClass$2.doCall() is applicable for argument types: () values: []
Possible solutions: call(), equals(java.lang.Object), isCase(java.lang.Object), findAll(), findAll(groovy.lang.Closure), notify()

A solução que encontrei, após umas pesquisas meia boca, é adicionar a seguinte chamada em cada teste que utilizar o GMock:

ExpandoMetaClass.disableGlobally()

Não, não vá pensando que colocar isso no setUp ou no controlador irá resolver suas duplicações. Tem que ser em cada teste mesmo.

EFEITO COLATERAL Caso o método que estiver sendo testando faça um render("text/json"){objetoCustomizado}, então uma exceção irá acontecer, ele não consegue fazer o cast do seu objeto para JSON. Isso acontece por conta do

ExpandoMetaClass.disableGlobally()

Porém, se for renderizada uma lista, ou um conjunto de propriedades, estilo

render(text/json){prop = Um valor}

Então a renderização acontece normalmente.

Fred Policarpo
Last edit
Tags
Posted by Fred Policarpo to ZeroGlosa (2013-01-29 16:17)