DBUnit,JUnit,PostgreSQL,Maven和H2内存设置

时间:2015-01-05 18:08:34

标签: junit h2 dbunit in-memory

我试图做一些简单的事情 - 我认为对DBUnit来说最简单的事情就是 - 我承认我已经失去了。

我只是想将DBUnit数据库状态加载到内存H2数据库中,这样我就可以在H2数据库上运行测试。

在Maven中,我手动使用dbunit-maven-pluginPostgresqlDataTypeFactory从现有数据库生成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

1 个答案:

答案 0 :(得分:0)

据我所知,显然DBUnit does not save and load the database schema(即没有包含列类型信息),使它远没有我假设的那么有用。也许这也是Table 'null'...错误的根源 - 我也不知道。

现在我必须弄清楚如何轻松转储我的PostgreSQL架构并将其转入H2以进行内存中测试。如果我可以梳理出我的PostgreSQL架构初始化语句,也许我可以使用Runscript。无论如何,DBUnit并不像我希望的那样容易成为转储/负载测试工具。