Mock Grails

Posted . Visible to the public.

Alguns mocks que o grails(1.1) fornece:
1 - mockDomain(Clazz, list)
Injeta nas classes de domínio alguns métodos que só existem em tempo de execução, como por exemplo os métodos de validação, save(), delete(), etc.
O segundo parâmetro é opcional e serve como estado inicial do banco de dados. Internamente é feita uma cópia desta lista, que é usada como bootstrap para o banco de dados em memória que ele utiliza. A lista é usada pra dizer quais objetos serão considerados persistidos no banco de dados.

 2 - mockFor(class, loose = false)

Obs: ao utilizar garantir que o mock não “vaze” para os outros testes, uma vez que o mock é feito alterando-se o meta-class do objeto.

Exemplo:
def strictControl = mockFor(MyService)
strictControl.demand.someMethod(0..2) { String arg1, int arg2 -> “”}
strictControl.demand.static.aStaticMethod {-> “” }

Métodos estáticos, bem como os de instância podem ser mocados simplesmente usando a propriedade static depois de demand. Em seguida, especifique o nome do método que você quer mockar com seu argumentos (opcionais). \
O intervalo informado após o nome do método determina quantas vezes você espera que o método será chamado, por isso, se o número de chamadas cai fora desta faixa (para menos ou para mais), então um assertion error será lançado. \
Se nenhum intervalo é especificado, um padrão de 1..1 é assumido, ou seja, espera-se que o método deve ser chamado exatamente uma vez.\
Para obter uma instancia do objeto em que o mock foi aplicado basta chamar o método createMock():\
Objeto meuObjeto = strictControl.createMock()\
O createMock pode ser chamado quantas vezes for necessário.\

 3 - mockForConstraintsTests(class, testInstances = )

Bastante semelhante ao mockDomain(), porém mais especializada em testar apenas as restrições das classes de dominio. O mockDomain() possui todas as opções que o mockForConstraintsTests disponibiliza.
Basicamente insere métodos de validação do objeto de domínio.\

  4 - mockLogging(class, enableDebug = false)

Mocka uma propriedade Log a classe passada no parâmetro. As mensagens passadas para o Log são mostradas no console.\

  5 - mockController(class)

Injeta alguns métodos no controller passado no parâmetro e geralmente é usado em conjunto com a classe ControllerUnitTestCase.\
Para testar controladores basta extender a classe ControllerUnitTestCase. Por exemplo: para testar o controller CadastroCompetenciaController um teste deve ser criado seguindo o padrão de nomenclatura:
CadastroCompetenciaControllerTests extends ControllerUnitTestCase {...}\
A classe ControllerUnitTestCase possui um atributo chamado chamado controller, que simula o controlador (o controlador é identificado por default pelo nome que demos à classe do nosso teste)
Para executar qualquer método do controller utilize: controller.meuMetodo()\
Para que um método do controller receba os parametros desejados utilize:
mockParams.nomeParametro =valorParametro
controller.meuMetodo()
Isto garante que no meuMetodo() o nomeParametro estará disponível no params.
Há várias outras opções disponíveis para testar controladores. Mais alguns exemplos:\
redirectArgs: pode ser usado para testar o redirecionamento de um método de um controller. possui 3 parâmetros: controller, action e model.\
mockResponse: pode ser usado para testar a resposta de um método do controller ao ser executado, possui atributos como por exemplo o mockResponse.contentAsString que verifica o texto enviado pelo controller.\

 6 - mockTagLib()

Adiciona alguns métodos dinamicos para testes de tagLibs. Geralmente é usado em conjunto com a classe TagLibUnitTestCase.

Victor Carvalho
Last edit
Tags
Posted by Victor Carvalho to ZeroGlosa (2012-06-05 01:38)