EntityManager nullo nas classes de teste arquillian
9 respostas
F
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
F
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.
B
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
D
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
B
bonissauro
Tem jeito de resolver isso, Danilo? Alguém falou algo sobre o entitymanagerfactory, mas to me enrolando cada vez mais nisso…
A
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());}