2016-11-25 3 views
0

Reinigung ich folgende Abhängigkeiten mit einem DBUnit Test-Test in Maven läuft nicht DBUnit Datenbank

 <dependency> 
      <groupId>org.dbunit</groupId> 
      <artifactId>dbunit</artifactId> 
      <version>2.4.9</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <version>2.3.4</version> 
      <scope>test</scope> 
     </dependency> 

Der Test läuft perfekt in inteliJ immer und immer wieder in Gang zu bringen, aber wenn ich den Test auf der Kommandozeile ausführen es scheitert die ganze Zeit mit Fremdschlüssel-Fehler auf den zweiten Test in meinem Test-Klasse Laden

<?xml version='1.0' encoding='UTF-8'?> 
<dataset> 
    <PUBLIC.REGIO id="1" entiteit="1" code="a" naam="regio 1"/> 
    <PUBLIC.REGIO id="2" entiteit="2" code="b" naam="regio 2"/> 

    <PUBLIC.REGIO /> 
</dataset> 

<persistence version="1.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_1_0.xsd"> 
    <persistence-unit name="voertuigbeheer" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>be.delijn.voertuigbeheer.entity.Regio</class> 
    <class>be.delijn.voertuigbeheer.entity.Stelplaats</class> 
    <class>be.delijn.voertuigbeheer.entity.VoertuigType</class> 
    <class>be.delijn.voertuigbeheer.entity.Voertuig</class> 
    <class>be.delijn.voertuigbeheer.entity.VoertuigEigenschap</class> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="eclipselink.logging.level" value="FINE"/> 
     <property name="eclipselink.logging.thread" value="false"/> 
     <property name="eclipselink.logging.session" value="false"/> 
     <property name="eclipselink.logging.timestamp" value="false"/> 
     <property name="eclipselink.logging.exceptions" value="false"/> 

     <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:hsql:mem"/> 
     <property name="javax.persistence.jdbc.user" value="sa"/> 
     <property name="javax.persistence.jdbc.password" value=""/> 
    </properties> 
    </persistence-unit> 
</persistence> 

public abstract class AbstractJPATest { 

    protected static EntityManagerFactory entityManagerFactory; 
    protected static EntityManager entityManager; 
    protected static IDatabaseConnection connection; 
    protected static IDataSet dataset; 

    @BeforeClass 
    public static void initEntityManager() throws Exception { 
     System.out.println("before class running"); 
     entityManagerFactory = Persistence.createEntityManagerFactory("voertuigbeheer"); 
     entityManager = entityManagerFactory.createEntityManager(); 

     ServerSession serverSession = entityManager.unwrap(ServerSession.class); 
     SchemaManager schemaManager = new SchemaManager(serverSession); 
     schemaManager.replaceDefaultTables(true, true); 
     ConnectionPool connectionPool = serverSession.getConnectionPool("default"); 
     Connection dbconn = connectionPool.acquireConnection().getConnection(); 
     connection = new DatabaseConnection(dbconn); 
     DatabaseConfig config = connection.getConfig(); 
     config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory()); 
     config.setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true); 

     FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder(); 
     flatXmlDataSetBuilder.setColumnSensing(true); 
     dataset = flatXmlDataSetBuilder.build(
       Thread.currentThread().getContextClassLoader().getResourceAsStream("test-dataset.xml")); 
    } 

    @AfterClass 
    public static void closeEntityManager() { 
     entityManager.close(); 
     entityManagerFactory.close(); 
    } 

    @Before 
    public void cleanDB() throws Exception { 
     System.out.println("loading"); 
     DatabaseOperation.CLEAN_INSERT.execute(connection, dataset); 
     setup(); 
    } 

    public abstract void setup(); 
} 

public class RegioDaoTests extends AbstractJPATest { 

    private RegioDao regioDao; 

    @Test 
    public void getAll() throws Exception { 
     List<Regio> result = regioDao.getAll(); 
     assertThat(result.size()).isEqualTo(2); 
    } 

    @Test 
    public void getById() throws Exception { 
     Regio regio = regioDao.getById(2L); 
     assertThat(regio.getId()).isEqualTo(2); 
    } 

    @Override 
    public void setup() { 
     regioDao = new RegioDao(); 
     regioDao.setEntityManager(entityManager); 
    } 
} 

Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; SYS_PK_10234 table: REGIO 
     at org.hsqldb.error.Error.error(Unknown Source) 
     at org.hsqldb.Constraint.getException(Unknown Source) 
     at org.hsqldb.index.IndexAVLMemory.insert(Unknown Source) 
     at org.hsqldb.persist.RowStoreAVL.indexRow(Unknown Source) 
     at org.hsqldb.TransactionManager2PL.addInsertAction(Unknown Source) 
     at org.hsqldb.Session.addInsertAction(Unknown Source) 
     at org.hsqldb.Table.insertSingleRow(Unknown Source) 
     at org.hsqldb.StatementDML.insertSingleRow(Unknown Source) 
     at org.hsqldb.StatementInsert.getResult(Unknown Source) 
     at org.hsqldb.StatementDMQL.execute(Unknown Source) 
     at org.hsqldb.Session.executeCompiledStatement(Unknown Source) 
     at org.hsqldb.Session.execute(Unknown Source) 

ich habe von HSQL zu H2 versucht gewechselt wird und umgekehrt beide Datenbanken das gleiche Problem geben. Die Tests in InteliJ funktionieren jedoch einwandfrei. Es läuft in maven, das den Fehler wirft. Was ich hier vermisse Ich bin völlig verloren warum es nicht funktioniert

Antwort

2

Ich fand es ... einen Schritt zurück und überdenken Dinge gefunden mir die Lösung Maven standardmäßig Testmethoden in paralell ausgeführt. Wenn Sie Maven nur laufen Klassen in paralell beschränken konnte ich es beheben

<build> 
    <finalName>voertuigbeheer-web</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19.1</version> 
      <configuration> 
       <parallel>classes</parallel> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Dies ist ein sehr ärgerlich „Feature“ war auf die Spur!

Verwandte Themen