Testing 将2个数据集与dbunit进行比较?

Testing 将2个数据集与dbunit进行比较?,testing,junit,dataset,compare,dbunit,Testing,Junit,Dataset,Compare,Dbunit,目前我需要为我的应用程序创建测试。我使用“dbunit”实现了这一点,现在需要比较两个数据集: 1) 我使用QueryDataSet从数据库中获取的记录 2) 预期结果以适当的FlatXML格式写入一个文件中,我也将该文件作为数据集读入 基本上,两个数据集可以通过这种方式进行比较 现在的问题是带有时间戳的列。它们永远不会与预期的数据集相匹配。我真的很想在比较它们的时候忽略它们,但这不是我想要的方式 当我通过添加列过滤器和ignoreColumns来比较每个表本身时,它确实起作用。然而,这种方法非

目前我需要为我的应用程序创建测试。我使用“dbunit”实现了这一点,现在需要比较两个数据集:

1) 我使用QueryDataSet从数据库中获取的记录
2) 预期结果以适当的FlatXML格式写入一个文件中,我也将该文件作为数据集读入

基本上,两个数据集可以通过这种方式进行比较

现在的问题是带有时间戳的列。它们永远不会与预期的数据集相匹配。我真的很想在比较它们的时候忽略它们,但这不是我想要的方式

当我通过添加列过滤器和ignoreColumns来比较每个表本身时,它确实起作用。然而,这种方法非常麻烦,因为在这种比较中使用了许多表,并且迫使人们添加太多代码,最终会变得臃肿。 这同样适用于具有空值的字段

一个可能的解决方案是,如果我有机会只比较所有表的第一列,而不是用它的列名命名,而是用它的列索引命名。但我什么也找不到


也许我遗漏了一些东西,或者可能它除了比较每个表本身之外没有任何其他作用?

为了完成,必须发布一些附加信息。实际上,我之前发布的解决方案根本无法工作,因为从数据库读取数据的过程让我陷入困境

使用“QueryDataset”的进程确实从数据库中读取了数据并将其保存为数据集,但无法再从此数据集访问数据(尽管我可以在调试模式下查看数据)! 相反,整个操作失败,在org.dbunit.database.ForwardOnlyResultSetTable.getRowCount(ForwardOnlyResultSetTable.java:73)处出现了一个不支持操作异常

产生故障的示例代码:

QueryDataSet qds = new QueryDataSet(connection);
qds.addTable(“specificTable”);
qds.getTable(„specificTable“).getRowCount(); 
即使这样尝试,也会失败:

IDataSet tmpDataset = connection.createDataSet(tablenames);
tmpDataset.getTable("specificTable").getRowCount();
为了进行提取,您需要添加此行(第二行):
IDataSet-tmpDataset=connection.createDataSet(表名)
IDataSet actualDataset=新缓存数据集(tmpDataset)

太好了,这没有任何记录

但这并不是全部:现在您肯定会认为,在执行“QueryDataSet”之后,也可以添加这一行。。。但是没有!这还是不行!它仍然会抛出相同的异常!这对我来说毫无意义,我浪费了太多时间在这上面

应该注意的是,从从xml文件读入的数据集中提取数据不会有任何问题。当试图直接从数据库获取数据集时,这种麻烦就会发生

如果已完成上述操作,则可以按以下步骤继续,只比较预期xml文件中的列:

    // put in here some code to read in the dataset from the xml file...
    // and name it "expectedDataset"
    // then get the tablenames from it...
    String[] tablenames = expectedDataset.getTableNames();

    // read dataset from database table using the same tables as from the xml
    IDataSet tmpDataset = connection.createDataSet(tablenames);
    IDataSet actualDataset = new CachedDataSet(tmpDataset);

    for(int i=0;i<tablenames.length;i++)
    {
        ITable expectedTable = expectedDataset.getTable(tablenames[i]);
        ITable actualTable = actualDataset.getTable(tablenames[i]);         
        ITable filteredActualTable = DefaultColumnFilter.includedColumnsTable(actualTable, expectedTable.getTableMetaData().getColumns());
        Assertion.assertEquals(expectedTable,filteredActualTable);
    }
//在这里输入一些代码,以便从xml文件读入数据集。。。
//并将其命名为“expectedDataset”
//然后从中获取表名。。。
String[]tablenames=expectedDataset.getTableNames();
//使用与xml相同的表从数据库表读取数据集
IDataSet tmpDataset=connection.createDataSet(表名);
IDataSet actualDataset=新缓存数据集(tmpDataset);

对于(int i=0;i您也可以使用以下格式:

// Assert actual database table match expected table
String[] columnsToIgnore = {"CONTACT_TITLE","POSTAL_CODE"}; 
Assertion.assertEqualsIgnoreCols(expectedTable, actualTable, columnsToIgnore);