【问题标题】:DBUnit, JUnit, PostgreSQL, Maven, and H2 in-memory setupDBUnit、JUnit、PostgreSQL、Maven 和 H2 内存设置
【发布时间】:2015-03-03 07:57:43
【问题描述】:

我正在尝试做一些简单的事情——我认为这是使用 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

【问题讨论】:

    标签: junit h2 dbunit in-memory


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2021-01-06
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多