I'm trying to do something simple---what I assumed would be the most simple thing to do with DBUnit---and I admit I'm lost.
I just want to load a DBUnit database state into an in-memory H2 database so I can run tests on the H2 database.
In Maven I manually use dbunit-maven-plugin with PostgresqlDataTypeFactory to generate dbunit.xml from an existing database. But this flat file XML database indicates no column types whatsoever. Should the DBUnit database dump in XML contain type information?
Following the online instructions, I try to create a JUnit test to simply load that XML file:
@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(); } } I put in a fake test and run the test. I get a lot of debug statements; it seems like it's reading something, although I see no values I recognize:
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 ... Then it starts initializing the data, but there are null values that are obviously incorrect:
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 Why am I getting an error Table 'null' not found in tableMap?