我试图做一些简单的事情 - 我认为对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
?
答案 0 :(得分:0)
据我所知,显然DBUnit does not save and load the database schema(即没有包含列类型信息),使它远没有我假设的那么有用。也许这也是Table 'null'...
错误的根源 - 我也不知道。
现在我必须弄清楚如何轻松转储我的PostgreSQL架构并将其转入H2以进行内存中测试。如果我可以梳理出我的PostgreSQL架构初始化语句,也许我可以使用Runscript
。无论如何,DBUnit并不像我希望的那样容易成为转储/负载测试工具。