Desfazer alterações no metaclass em testes de unidade

Posted . Visible to the public.

Em testes de unidade é comum utilizarmos mocks através do metaclass, como no exemplo abaixo:
boolean called = false
Foo.metaclass.doSomething = { called = true }
new Foo().doSomething()
assert called
Porém em alguns casos esta alteração no metaclass pode ser mantida nos outros testes, de modo que causaria erros em quem utilizasse a classe Foo.
Um solução encontrada para este problema é disponibilizada pela api do groovy, que deve ser executada ao final de cada teste (no método tearDown por exemplo):
GroovySystem.metaClassRegistry.removeMetaClass(Foo.class)

Victor Carvalho
Posted by Victor Carvalho to ZeroGlosa (2013-04-03 13:08)