【发布时间】:2015-03-03 07:57:43
【问题描述】:
我正在尝试做一些简单的事情——我认为这是使用 DBUnit 做的最简单的事情——我承认我迷路了。
我只想将 DBUnit 数据库状态加载到内存中的 H2 数据库中,以便在 H2 数据库上运行测试。
在 Maven 中,我手动使用 dbunit-maven-plugin 和 PostgresqlDataTypeFactory 从现有数据库生成 dbunit.xml。但是这个平面文件 XML 数据库没有任何列类型。 XML 中的 DBUnit 数据库转储是否应该包含类型信息?
按照在线说明,我尝试创建一个 JUnit 测试来简单地加载该 XML 文件:
@BeforeClass
public static void setupDBUnit() throws ClassNotFoundException, SQLException, DatabaseUnitException {
Class.forName("org.h2.Driver");
Connection jdbcConnection = DriverManager.getConnection("jdbc:h2:mem:foo");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
IDataSet dataSet=new FlatXmlDataSetBuilder().build(FooTest.class.getResourceAsStream("dbunit.xml"));
try {
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
} finally {
connection.close();
}
}
我进行了一个假测试并运行了测试。我得到了很多调试语句;似乎它正在阅读某些内容,尽管我没有看到我认可的值:
09:55:29.802 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=value) - start
09:55:29.802 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=value) - end - result=VALUE
09:55:29.802 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=VALUE) - start
09:55:29.802 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=VALUE) - end - result=VALUE
09:55:29.802 [main] DEBUG org.dbunit.dataset.CachedDataSet - startTable(metaData=tableName=value, columns=[], keys=[]) - start
09:55:29.802 [main] DEBUG o.dbunit.dataset.xml.FlatXmlProducer - endElement(uri=, localName=, qName=value) - start
09:55:29.802 [main] DEBUG o.dbunit.dataset.xml.FlatXmlProducer - startElement(uri=, localName=, qName=value, attributes=com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser$AttributesProxy@63e2203c) - start
09:55:29.802 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getLastTableName() - start
09:55:29.802 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=value) - start
09:55:29.802 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=value) - end - result=VALUE
...
然后开始初始化数据,但是有null的值明显不正确:
09:55:29.851 [main] DEBUG org.dbunit.database.DatabaseDataSet - getTableMetaData(tableName=null) - start
09:55:29.851 [main] DEBUG org.dbunit.database.DatabaseDataSet - initialize() - start
09:55:29.851 [main] DEBUG org.dbunit.database.DatabaseDataSet - Initializing the data set from the database...
09:55:29.876 [main] DEBUG org.dbunit.database.DatabaseDataSet -
database product name=H2
database version=1.4.184 (2014-12-19)
database major version=1
database minor version=4
jdbc driver name=H2 JDBC Driver
jdbc driver version=1.4.184 (2014-12-19)
jdbc driver major version=1
jdbc driver minor version=4
09:55:29.876 [main] DEBUG org.dbunit.database.DatabaseDataSet - metadata resultset=rs0: org.h2.result.LocalResult@27f723 columns: 11 rows: 0 pos: -1
09:55:29.876 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=null) - start
09:55:29.876 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=null) - end - result=NULL
09:55:29.876 [main] ERROR org.dbunit.database.DatabaseDataSet - Table 'null' not found in tableMap=org.dbunit.dataset.OrderedTableNameMap[_tableNames=[], _tableMap={}, _caseSensitiveTableNames=false]
09:55:29.876 [main] DEBUG o.d.d.s.AbstractBatchStatement - close() - start
09:55:29.876 [main] DEBUG o.dbunit.database.DatabaseConnection - close() - start
为什么我收到错误 Table 'null' not found in tableMap?
【问题讨论】: