Vraptor + mockitto

9 respostas
cleitonmoura18
Galera é o seguinte quando eu vou testar o controller com o mockito ele não consegui salvar os dados no Banco. criei as classes com vraptor Scaffold. quando faço manualmente dah certo mas os testes não. quando chamo um controller pra salvar um usuario ele não chama a Classe repositorio, mas segui todos os passos do metodo. olha ai meu codigo. Estou usando Hibernate, mas não fiz nenhuma classe pra criar SessionFactory.acho que o scaffold jah faz isto.
package br.ufpi.util;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

import br.com.caelum.vraptor.util.test.JSR303MockValidator;
import br.com.caelum.vraptor.util.test.MockResult;
import br.ufpi.controllers.UsuarioController;
import br.ufpi.models.Usuario;
import br.ufpi.repositories.UsuarioRepositoryImpl;

public class GerarDadosBanco {
	
	
	private UsuarioRepositoryImpl usuarioRepository;
	
	private MockResult result;
	 
	 private JSR303MockValidator validator;

	private UsuarioController usuarioController;
	@Before
	public void before() {
	usuarioRepository=Mockito.mock(UsuarioRepositoryImpl.class);
	result = Mockito.spy(new MockResult());
	  validator = Mockito.spy(new JSR303MockValidator());
		usuarioController = new UsuarioController(result, usuarioRepository,
				validator);
	}

	@Test
	public void gerarUsuarios() {
		System.out.println("Salvando Usuarios");
		Usuario usuario = new Usuario("cleiton", "moura",
				"[email removido]", "[telefone removido]");
		usuarioController.create(usuario);
		Mockito.verify(usuarioRepository).create(usuario);
		

	}
}

9 Respostas

renanreismartins

bom dia cleiton

realmente dessa maneira os dados nao vao ser persistidos. pois vc esta mockando seu repositorio.

Caso seu teste seja de unidade então vc está fazendo da maneira correta, ou seja, isolando seu codigo.

Segue uma explicação legal sobre mocks e qdo usa-los

http://improveit.com.br/xp/praticas/tdd/mock_objects

abrasss

Lucas_Cavalcanti

Como o Renan já falou, se você mockou o repository ele não vai fazer nada mesmo.

o teste de controller talvez não seja o melhor lugar para testar se o objeto vai pro banco

cleitonmoura18

Vc tem algum exemplo jah feito pra passar?
se não for pedir demais.

Lucas_Cavalcanti

dá uma olhada nos testes dos controllers

Nykolas_Lima

Lucas Cavalcanti:
http://github.com/caelum/calopsita

dá uma olhada nos testes dos controllers

Lucas, como você faz para executar seus testes utilizando o hibernate.properties específico de testes, com a base de dados na memória?

Lucas_Cavalcanti

só criar a SessionFactory apontando pra esse arquivo de properties (ou xml) de testes.

Nykolas_Lima

Mas isso você faz nos @Before dos seus testes?
Tenho dúvida de como fazer para que ao rodar os testes ele pegue automaticamente que o properties deve ser o de testes.

Lucas_Cavalcanti

ainda no link do calopsita:

extends:

no método prepare vc pode forçar um properties de teste.

no caso do calopsita a gente tem um hibernate.cfg.xml no src/test/resources, que é pego ao invés do main.

Nykolas_Lima

Lucas Cavalcanti:
ainda no link do calopsita:

extends:

no método prepare vc pode forçar um properties de teste.

no caso do calopsita a gente tem um hibernate.cfg.xml no src/test/resources, que é pego ao invés do main.

Muito obrigado Lucas, solução bem simples e eu não tinha me tocado…

abraços

Criado 5 de fevereiro de 2012
Ultima resposta 7 de fev. de 2012
Respostas 9
Participantes 4