2012-05-17 84 views
1

为什么不能正常工作?我试图测试一个空的数据库是相同的,然后什么也不做,什么都不做。换句话说,这是带有我能想到的数据库的最简单的dbunit测试。它不起作用。测试方法实际上是从http://www.dbunit.org/howto.html简单的dbunit表比较失败

举起我得到比较空数据库的错误信息是:

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

我得到比较空表的错误信息是:

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]> 

(为了便于阅读,我添加了换行符)

我可以在完整的堆栈跟踪(或其他任何东西)中编辑它是否有用。或者你可以通过公共git回购浏览:https://bitbucket.org/djeikyb/simple_dbunit

我是否需要以某种方式将我的实际IDataSet转换为xml,然后返回到IDataSet以正确比较?我在做什么/期待错误?

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 } 

回答

2

当你比较IDataSet等DBUnit的组件,你必须使用由DBUnit的提供的assert method

如果你使用断言JUnit提供的方法,将只能通过equals方法Object 这就是为什么你得到一个关于不同的对象类型的错误抱怨比较。