djeikyb
djeikyb

Reputation: 4598

Simple dbunit table comparison fails

Why doesn't this work? I'm trying to test that an empty database is the same before doing nothing as after doing nothing. In other words, this is the simplest dbunit test with a database that I can think of. And it doesn't work. The test methods are practically lifted from http://www.dbunit.org/howto.html

The error message I'm getting for comparing empty database is:

java.lang.AssertionError: expected:
org.dbunit.dataset.xml.FlatXmlDataSet<AbstractDataSet[_orderedTableNameMap=null]>
but was:
org.dbunit.database.DatabaseDataSet<AbstractDataSet[_orderedTableNameMap=null]>

The error message I'm getting for comparing empty table is:

java.lang.AssertionError: expected:
<org.dbunit.dataset.DefaultTable[_metaData=tableName=test, columns=[], keys=[], _rowList.size()=0]>
but was:
<org.dbunit.database.CachedResultSetTable[_metaData=table=test, cols=[(id, DOUBLE, noNulls), (txt, VARCHAR, nullable)], pk=[(id, DOUBLE, noNulls)], _rowList.size()=0]>

(I've added newlines for readability)

I can edit in the full stack trace (or anything else) if it'll be useful. Or you can browse through the public git repo: https://bitbucket.org/djeikyb/simple_dbunit

Do I need to somehow convert my actual IDataSet to xml then back to IDataSet to properly compare? What am I doing/expecting wrong?

 34 public class TestCase
 35 {
 36 
 37   private IDatabaseTester database_tester;
 38 
 39   @Before
 40   public void setUp() throws Exception
 41   {
 42     database_tester = new JdbcDatabaseTester("com.mysql.jdbc.Driver",
 43                                             "jdbc:mysql://localhost/cal",
 44                                             "cal",
 45                                             "cal");
 46 
 47     IDataSet data_set = new FlatXmlDataSetBuilder().build(
 48         new FileInputStream("src/simple_dbunit/dataset.xml"));
 49     database_tester.setDataSet(data_set);
 50 
 51     database_tester.onSetup();
 52   }
 53 
 54   @Test
 55   public void testDbNoChanges() throws Exception
 56   {
 57     // expected
 58     IDataSet expected_data_set = new FlatXmlDataSetBuilder().build(
 59         new FileInputStream("src/simple_dbunit/dataset.xml"));
 60 
 61     // actual
 62     IDatabaseConnection connection = database_tester.getConnection();
 63     IDataSet actual_data_set = connection.createDataSet();
 64 
 65     // test
 66     assertEquals(expected_data_set, actual_data_set);
 67   }
 68 
 69   @Test
 70   public void testTableNoChanges() throws Exception
 71   {
 72     // expected
 73     IDataSet expected_data_set = new FlatXmlDataSetBuilder().build(
 74         new FileInputStream("src/simple_dbunit/dataset.xml"));
 75     ITable expected_table = expected_data_set.getTable("test");
 76 
 77     // actual
 78     IDatabaseConnection connection = database_tester.getConnection();
 79     IDataSet actual_data_set = connection.createDataSet();
 80     ITable actual_table = actual_data_set.getTable("test");
 81 
 82     // test
 83     assertEquals(expected_table, actual_table);
 84   }
 85 
 86 }

Upvotes: 1

Views: 3979

Answers (1)

Rangi Lin
Rangi Lin

Reputation: 9461

When you compare the IDataSet and other DBUnit components, you have to use the assert method that provided by DBUnit.

If you use assert methods provided by JUnit, it will only be compared via equals method in Object That's why you get the error complaining about different object type.

Upvotes: 2

Related Questions