2016-11-25 5 views
0

Я использую следующие зависимости для получения теста DBUnit СобираетсяТест работает в мавена не почистил DBUnit базы данных

 <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> 

Тест работает отлично в inteliJ снова и снова, но когда я запускаю тест в командной строке он терпит неудачу все время с внешними ключами ошибок ограничений по загрузке второго теста в моем тестовом классе

<?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) 

Я попытался переход от HSQL Н2 и наоборот обе базы данных дают такую ​​же проблему. Однако повторный запуск тестов в InteliJ работает отлично. Он работает в maven, который продолжает бросать ошибку. Что мне здесь не хватает, я полностью потерял, почему это не сработало.

ответ

2

Я нашел его ... сделав шаг назад и переосмыслив все, что я нашел, решение maven по умолчанию запускает методы тестирования в paralell. Если ограничить Maven только классов пробега в paralell я был в состоянии исправить это

<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> 

Это было очень раздражает «особенность», чтобы выследить!

Смежные вопросы