Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 在连续测试中加载数据集失败,返回“0”;“非公开会议”;_Unit Testing_Hsqldb_Testng_Dbunit - Fatal编程技术网

Unit testing 在连续测试中加载数据集失败,返回“0”;“非公开会议”;

Unit testing 在连续测试中加载数据集失败,返回“0”;“非公开会议”;,unit-testing,hsqldb,testng,dbunit,Unit Testing,Hsqldb,Testng,Dbunit,我有两个测试类,都用unitils注释 @DataSet("/dbunit-dataset.xml") 目标数据库是一个HSQLDB,它由一个抽象超类方法启动,该方法用testng注释进行注释: @BeforeClass 当testrunner(MavenSurefire)到达第二个测试时,数据库被正确实例化(我可以在日志中看到),但是unitils,或者实际上是dbunit,无法加载数据集 Caused by: org.unitils.core.UnitilsException: Erro

我有两个测试类,都用unitils注释

@DataSet("/dbunit-dataset.xml")
目标数据库是一个HSQLDB,它由一个抽象超类方法启动,该方法用testng注释进行注释:

@BeforeClass
当testrunner(MavenSurefire)到达第二个测试时,数据库被正确实例化(我可以在日志中看到),但是unitils,或者实际上是dbunit,无法加载数据集

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
我很奇怪为什么dbunit在第一个测试类中成功连接到HSQLDB,而在第二个测试类中却没有

每个人都有线索吗

谢谢大家!!
J.

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

@BeforeClass设置方法中,通过打开与每个类的连接,为每个类重新创建HSQLDB实例:

Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection("jdbc:hsqldb:mem:unit-testing-jpa", "sa","");
并且,在@AfterClass拆卸方法中,db被明确删除:

connection.createStatement().execute("SHUTDOWN");
重新创建数据库不是一个大问题,除非。。。DBUnit持有对数据库连接的引用,并期望在每个测试用例中继续在同一个数据库上工作

shutdown=true连接修改器帮助很大

=>修复:

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

(2) 通过向初始连接添加shutdown=true以声明方式断开数据库

Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection("jdbc:hsqldb:mem:unit-testing-jpa;shutdown=true", "sa","");
这将使HSQLDB在最后一个连接关闭时自动关闭。

(另请参见:)

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

@BeforeClass设置方法中,通过打开与每个类的连接,为每个类重新创建HSQLDB实例:

Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection("jdbc:hsqldb:mem:unit-testing-jpa", "sa","");
并且,在@AfterClass拆卸方法中,db被明确删除:

connection.createStatement().execute("SHUTDOWN");
重新创建数据库不是一个大问题,除非。。。DBUnit持有对数据库连接的引用,并期望在每个测试用例中继续在同一个数据库上工作

shutdown=true连接修改器帮助很大

=>修复:

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

(2) 通过向初始连接添加shutdown=true以声明方式断开数据库

Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection("jdbc:hsqldb:mem:unit-testing-jpa;shutdown=true", "sa","");
这将使HSQLDB在最后一个连接关闭时自动关闭。
(另见:)