EntityManager nullo nas classes de teste arquillian
9 respostas
furlaneto
Olá, eu sou um iniciante com arquillian e estou trabalhando com essas tecnologias:
jboss-as-7.1.1.Final
JSF 2
EJB3.1
Nas minhas classes de teste arquillian eu preciso usar EntityManager para complementar os testes, mas o EntityManager é sempre nulo. Estou tentando usar assim:
Opa, obrigado pela resposta. Usei esse site para começar os testes, baseado nele e em outros tutoriais que encontrei, era para estar funcionando. Não identifico o que pode estar errado. Pretendo a partir do momento que o entityManager estiver funcionando criar o seguinte cenário de teste: chamar uma classe que vai inserir um usuário por exemplo, então farei um select diretamente com o entityManager para conferir se o usuário foi cadastrado.
fiz um teste parecido com o seu, mas eu usei uma fabrica pra produzir os EntityManagers e usei a anotação @inject do cdi pra injetar no teste e funcionou legal
furlaneto
Acredito que no meu tb funcione, mas eu to tentando usar com @PersistenceContext pq como o arquillian funciona lá no servidor, teoricamente deveria funcionar. Acho que vou ter que usar um outro tipo de estratégia para esse tipo de verificação.
bonissauro
Danilo,
antes de mais nada, peço desculpas por ressuscitar o tópico, mas estou com um problema parecido com o teu. Como resolveste isso?
A titulo de informacao, injeto assim:
@PersistenceContextEntityManagerentityManager;
Quando executo em algum metodo qualquer de um managedbean de teste e com o servidor rodando, roda beleza.
Mas quando faço isso numa classe teste, dá pau, porque o entitymanager vem nulo.
Olha minha classe teste:
@Named(value="cepTest")publicclassCepTest{@PersistenceContextEntityManagerentityManager;publicCepTest(){}@BeforepublicvoidsetUp(){// em = Persistence.createEntityManagerFactory("triplice_B2C").createEntityManager();}@TestpublicvoidbuscaCEPs(){System.out.println(entityManager);Queryq=entityManager.createQuery("select o from VendaWeb");System.out.println(q.getResultList());}}
Agradeço qualquer ajuda.
Giovanni
DaniloAndrade
o @PersistenceContext so funciona quando sua classe é gerenciada pelo servidor de aplicação, mas com vc ta usando uma classe de teste que esta gerenciando a classe é o junit, e ele não conhece a @PersistenceContext e não vai injetar o EntityManager
bonissauro
Tem jeito de resolver isso, Danilo? Alguém falou algo sobre o entitymanagerfactory, mas to me enrolando cada vez mais nisso…
aix
oi Bonissauro,
faça como te falei no post anterior
ex:
@TestpublicvoidtestEmFactoryJPA(){privatestaticEntityManagerFactoryemf=Persistence.createEntityManagerFactory("suaUnidadeDePersistencia");Queryquery=em.createQuery("SELECT t FROM Table t");List<Tabela>registros=query.getResultList();em.close();assertFalse(registros.isEmpty());}