在Maven中运行测试无法清除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切换到H2,反之亦然,两个数据库都出现相同的问题。但是,再次在InteliJ中运行测试也可以正常工作。它在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>

这是一个非常烦人的“功能”!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Oracle作为嵌入式数据库在Maven中运行单元测试?

来自分类Dev

清除测试环境的数据库?

来自分类Dev

dbunit如何将真实数据库与测试数据库同步

来自分类Dev

运行数据库TDD测试

来自分类Dev

数据库更新无法在Meteor方法中运行

来自分类Dev

无法更改在Docker中运行的数据库

来自分类Dev

无法在 php 函数中运行数据库查询

来自分类Dev

我无法在Mac OS X Lion中清除终端-“无法访问终端数据库”

来自分类Dev

Postgres用户在运行Django测试时无法创建数据库

来自分类Dev

Django测试未在测试数据库上运行

来自分类Dev

数据库sqlite无法运行,

来自分类Dev

春季测试+ DBUnit无法加载数据集

来自分类Dev

无法在注销Android时清除解析数据库

来自分类Dev

清除命令-无法访问终端数据库

来自分类Dev

清除命令-无法访问终端数据库

来自分类Dev

无法在注销Android时清除解析数据库

来自分类Dev

索引数据库清除后无法打开

来自分类Dev

无法将HIbernate + H2加载到内存数据库中以使用Spring和Maven自动进行测试

来自分类Dev

清除OrientDB数据库

来自分类Dev

如何在Android中清除Realm中的数据库

来自分类Dev

Grails功能测试-数据库设置/拆卸,在Eclipse中作为JUnit运行

来自分类Dev

如何在Rails中的预填充数据库上运行测试?

来自分类Dev

FMDB数据库无法在设备上运行,但可以在模拟器中运行

来自分类Dev

无法从数据库中获取数据

来自分类Dev

无法显示数据库中的数据

来自分类Dev

无法从数据库中检索数据

来自分类Dev

Maven,用于测试和开发的不同数据库URL

来自分类Dev

Maven,用于测试和开发的不同数据库URL

来自分类Dev

从网页退出时清除数据库中的表

Related 相关文章

热门标签

归档