2016-04-12 1 views
0

Je suis en train d'utiliser DeltaSpike test-Control Module pour créer des tests d'intégration pour une nouvelle application maven que je développeDeltaSpike Test-contrôle - Unité persistance Introuvable

Il est déployé sur un wildfly 9 instance

un exemple simple de test:

@RunWith(CdiTestRunner.class) 
@TestControl(projectStage = ProjectStage.IntegrationTest.class) 
public class EmpresaCrudIntegrationTestCase { 

    private static final String NOME_NOVA_EMPRESA = "teste"; 

    @Inject private EmpresaService empresaService; 

    @Test 
    public void test() { 
     Empresa empresa = empresaService.save(new Empresa(NOME_NOVA_EMPRESA)); 

     Assert.assertNotNull(empresa.getId()); 
     Assert.assertEquals(NOME_NOVA_EMPRESA, empresa.getNome()); 
     Assert.assertTrue(empresa.getAtivo()); 
    } 

} 

J'ai un persistence.xml situé à l'intérieur src/test/resources/META-INF qui ressemble à ceci:

<persistence version="2.0" 
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="medipop" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <non-jta-data-source>java:jboss/datasources/medipop-test</non-jta-data-source> 

     <properties> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> 
     </properties> 

    </persistence-unit> 
</persistence> 

Le directeur de l'entité est exposée par une méthode de production de CDI:

@PersistenceUnit 
private EntityManagerFactory entityManagerFactory; 

@Produces 
@RequestScoped 
public EntityManager create() { 
    return this.entityManagerFactory.createEntityManager(); 
} 

Le problème est que la EntityManagerFactory reste nulle lors de la création du EntityManager

Toute aide est la bienvenue.

+0

La seule chose qui ressort est que vous faites référence à une source de données. DS Test Control ne fonctionne pas sur le serveur complet de l'application comme le fait Arquillian, il s'exécute dans un environnement d'exécution CDI pur. Il n'y a pas de source de données disponible. Vous devez remplacer votre fabrique de gestionnaire d'entités pour la charger dans une base de données dédiée. Cette section peut vous donner quelques conseils: http://deltaspike.apache.org/documentation/jpa.html#MultipleEntityManagers –

Répondre

1

Vous ne pouvez pas injecter un entityManager non géré (RESOURCE_LOCAL) avec @PersistenceUnit dans un test qui s'exécute en dehors d'un conteneur (Java EE). Vous neeed de rechercher, voici un exemple:

@ApplicationScoped 
public class TestEntityManagerProducer { 

    private EntityManager entityManager; 
    private EntityManagerFactory emf; 

    @PostConstruct 
    public void initDB(){ 
    emf = Persistence.createEntityManagerFactory("medipop"); 
    } 

    @Produces 
    @RequestScoped 
    public EntityManager produceEntityManager() 
    { 
    entityManager = emf.createEntityManager(); 
    return entityManager; 
    } 

    public void closeEntityManager(@Disposes EntityManager entityManager) 
    { 
    if (entityManager != null && entityManager.isOpen()) 
    { 
     entityManager.close(); 
    } 
    } 

} 

vous aussi besoin d'un beans.xml dans src/test/resources/META-INF.