Olá Pessoal...
Neste artigo irei implementar um teste somente da lógica de um controlador para o framework grails.Utilizarei objetos mocks para isolar as lógicas externas ao controlador.
Dependencias:
- gmock é um framework escrito em groovy para criar objetos mokcs.
Vamos ao trabalho:
Passo 1: implementando uma aplicação básica
Criando uma aplicação
grails create-app Teste
Criando a classe de domínio pessoa
grails create-domain-class teste.Pessoa
Adicionado o campo nome na classe de domínio pessoa
package teste class Pessoa { String nome static constraints = { } }
Criando o controlador
grails create-controller pessoa
Alterando o controlador
package teste class PessoaController { def pessoaService def buscar = { def pessoa = pessoaService.buscarPessoa(params.id) [pessoa:pessoa] } }
Criando o serviço
grails create-service pessoa
Alterando o serviço
package teste class PessoaService { static transactional = true def buscaPessoa(id) { return new Pessoa(nome:"teste") } }
Passo 2: implementando o teste
Adicionando a dependencia Gmock no arquivo BuildConfig.groovy
dependencies {
test "org.gmock:gmock:0.8.0"
}
Alterando o arquivo de teste PessoaControllerTests.groovy
package teste import grails.test.* import org.gmock.* @WithGMock class PessoaControllerTests extends ControllerUnitTestCase { protected void setUp() { super.setUp() } protected void tearDown() { super.tearDown() } void testDeveriaBuscarPessoa() { def result = new Pessoa(id:1,nome:"TESTE") def service = new PessoaService() mock(service).buscarPessoa(1).returns(result) mock(controller).pessoaService.returns(service) play{ controller.params.id = 1 def acao = controller.buscar() assertEquals(result.nome,acao.pessoa.nome) } } }
Agora é só executar o teste
grails test-app --unit
A aplicação de exemplo está no github
Espero que o artigo ajude.
Qualquer dúvida sintam-se a vontade para me enviar um email: luiszandonadi@gmail.com






