代码之家  ›  专栏  ›  技术社区  ›  Jan

在连续测试中加载数据集失败,出现“关闭会话”

  •  1
  • Jan  · 技术社区  · 15 年前

    我有两个测试类,都用 单身族 注释

    @DataSet("/dbunit-dataset.xml")
    

    目标数据库是 HQLDB 在用注释的抽象超类方法中启动。 试制 注释:

    @BeforeClass
    

    当测试运行程序(maven 万事如火 )到达第二个测试时,数据库被正确地实例化(我可以在日志中看到),但是 单身族 或实际上 单元测试 ,无法加载数据集。

    Caused by: org.unitils.core.UnitilsException: Error while executing DataSetLoadStrategy
            at org.unitils.dbunit.datasetloadstrategy.impl.BaseDataSetLoadStrategy.execute(BaseDataSetLoadStrategy.java:48)
            at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:230)
            at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:153)
            ... 34 more
    Caused by: java.sql.SQLException: Access is denied: Session is closed
            at org.hsqldb.jdbc.Util.throwError(Unknown Source)
            at org.hsqldb.jdbc.jdbcStatement.executeBatch(Unknown Source)
            at org.dbunit.database.statement.BatchStatement.executeBatch(BatchStatement.java:59)
            at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:126)
            at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
            at org.unitils.dbunit.datasetloadstrategy.impl.CleanInsertLoadStrategy.doExecute(CleanInsertLoadStrategy.java:45)
            at org.unitils.dbunit.datasetloadstrategy.impl.BaseDataSetLoadStrategy.execute(BaseDataSetLoadStrategy.java:44)
            ... 36 more
    

    我疑惑为什么 单元测试 管理连接到 HQLDB 在第一个测试班,但不是在第二个测试班。

    恩博迪有线索吗?

    谢谢您! J

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jan    15 年前

    以下内容澄清/回答了问题:

    @ BeforeClass 安装方法,已重新创建hsqldb实例 每堂课 ,打开与它的连接:

    Class.forName("org.hsqldb.jdbcDriver");
    connection = DriverManager.getConnection("jdbc:hsqldb:mem:unit-testing-jpa", "sa","");
    

    而且,在 @ AfterClass 拆卸方法,数据库被显式删除:

    connection.createStatement().execute("SHUTDOWN");
    

    重新创建数据库不是一个大问题, 除非 …dbUnit保存对数据库连接的引用,并期望在每个测试用例中继续处理同一个数据库。

    这个 关闭=真 连接修改器帮助了很多…

    =:修复:

    (1)删除 @ AfterClass 逻辑:不要明确关闭数据库

    (2)通过添加 关闭=真 到初始连接

    Class.forName("org.hsqldb.jdbcDriver");
    connection = DriverManager.getConnection("jdbc:hsqldb:mem:unit-testing-jpa;shutdown=true", "sa","");
    

    这将使hsqldb在最后一个连接关闭时自动关闭。
    (也见: http://hsqldb.org/doc/guide/ch04.html )