Lucas, creio que o problema é que a implementação que o garcia fez usa as classes base do hibernate, e portanto ela não dispara o erro , mas é só uma opinião.
garcia-jj:
Oi Wagner. Não sou o Lucas, mas quem sabe eu possa ajudar. Fui eu quem implementou a integração com o Bean Validator.
Essa sua classe na verdade faz o que? Ela é um mock para fazer de conta que é o Hibernate Validator 3x ou 4x?
Essa sua DAO está sendo criada como? Ela é um mock ou classe concreta? Como você injeta o Entity Manager nela?
- é Um mock para fazer de conta que é o Hibernate Validator, pois o MockValidator normal não implementava o .validate(objeto)
- Uso um Dao concreto, pois AINDA não sei usar o Mockito ( um passo de cada vez, rsrsrsrsr)
veja neste link o codigo que eu tinha sugerido, baseado na implementacao do leandros … http://www.guj.com.br/java/231575-resolvido-github--vraptor---ajuda-para-fazer-um-mini-tutorial#1191480
Lucas Cavalcanti:
o cad passa no hibernate validator?
seu controller tem a chamada ao validator.onErrorXXXX?
- sim. o cadastro passa no validator. (o que tem que passar, e o que gera erro, dããã, está gerando o erro) isto, executando/subindo a classe/projeto e fazendo os testes na mão
- o controller tem a chamada ao validator.onError
para aprendizes como eu que os logs são uteis, mesmo que do tipo debug
========================
Controller
public void salva(final CadastroGeral cadastro) {
validator.validate(cadastro);
validator.onErrorUsePageOf(this).formulario();
this.dao.save(cadastro);
//result.include("alerta", "Cadastro '" + cadastro.getNome() + "' adicionado com sucesso.");
result.redirectTo(this).lista();
}
Dao que extende um dao generico
package br.com.admwagner.processos.dao;
import br.com.admwagner.processos.model.CadastroGeral;
import br.com.caelum.vraptor.ioc.Component;
import org.hibernate.Query;
import org.hibernate.Session;
@Component
public class CadastroGeralDao extends DaoGenericoHibernate<CadastroGeral, String> {
public CadastroGeralDao( Session session) {
super.setSession(session);
}
public boolean existeCadastroPorCpfCnpj(String cpfcnpj) {
String hql = "from CadastroGeral cad where cad.cpfcnpj = :cpfcnpj";
Query query = super.getSession().createQuery(hql).setParameter("cpfcnpj", cpfcnpj);
return !query.list().isEmpty();
}
public CadastroGeral buscaCadastroPorCpfCnpj(String cpfcnpj) {
String hql = "from CadastroGeral cad where cad.cpfcnpj = :cpfcnpj";
Query query = super.getSession().createQuery(hql).setParameter("cpfcnpj", cpfcnpj);
return (CadastroGeral) query.uniqueResult();
}
}
teste junit
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.admwagner.processos.controller;
import java.util.List;
import org.apache.log4j.Logger;
import br.com.admwagner.util.HibernateMockValidator; - ESTA É A CLASSE QUE EU IMPLEMENTEI
//import br.com.caelum.vraptor.util.test.HibernateMockValidator; - ESTA É A CLASSE QUE ESTA NO VRAPTOR
import br.com.caelum.vraptor.util.test.MockResult;
import br.com.admwagner.processos.dao.CadastroGeralDao;
import br.com.admwagner.processos.model.CadastroGeral;
import br.com.admwagner.util.CriadorSession;
import br.com.caelum.vraptor.validator.ValidationException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.hibernate.classic.Session;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
public class CadastroGeralControllerTest {
private static final Logger log = Logger.getLogger(CadastroGeralControllerTest.class);
private Session session;
private CadastroGeralDao dao;
private MockResult result;
private CadastroGeralController controller;
private HibernateMockValidator validator;
public CadastroGeralControllerTest() {
}
@Before
public void setUp() throws Exception { // inicia a cada teste
session = CriadorSession.getSession(); // TODO - uma classe que cria a session - podia colocar somente no inicio do teste, mas depois mudo isto.
session.beginTransaction(); // pra não deixar nada no banco ????
dao = new CadastroGeralDao(session); // um dao concreto, ainda não sei usar o mockito
result = new MockResult();
validator = new HibernateMockValidator(); // um mock do hibernate
controller = new CadastroGeralController(dao, validator, result); // o controler
}
@After
public void tearDown() throws Exception {
if (session != null && session.getTransaction().isActive()) {
session.getTransaction().rollback();
}
}
@Test // o teste devia passar pois é criado um cadastro válido
public void AdicionarNovoCadastro(){
CadastroGeral cad = new CadastroGeral("teste nome", "[telefone removido]");
controller.salva(cad);
assertTrue(dao.existeCadastroPorCpfCnpj("[telefone removido]"));
}
@Test(expected=ValidationException.class) // o teste devia passar pois a classe validator devia gerar o erro esperado
public void AdicionaComNomeNulo(){
CadastroGeral cad = new CadastroGeral( );
cad.setCpfcnpj("[telefone removido]");
controller.salva(cad);
}
}