为什么这不起作用?我正在尝试测试一个空数据库在无所事事之前无所事事之前是相同的。换句话说,这是我能想到的最简单的数据库dbunit测试。它不起作用。测试方法实际上取自http://www.dbunit.org/howto.html
我收到的用于比较空数据库的错误消息是:
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 }
答案 0 :(得分:2)
比较IDataSet
和其他DBUnit组件时,必须使用DBUnit提供的assert method。
如果您使用JUnit提供的断言方法,则只能通过equals
中的Object
方法进行比较
这就是为什么你得到错误抱怨不同的对象类型。