使用dbUnit的 IDataSet 因乱序造成assert失败而采取的措施

本例源码下载:https://files.cnblogs.com/files/xiandedanteng/dbUnitTest20200211.zip

在做IDataSet比较时,特殊情况下会有期盼的IDataset和预想的IDataSet因顺序不一样而导致assert失败的情况发生。

一般的处理是用双重循环进行比较,也可以采用下面的方式:

准备的XLS:

期待的XLS:

可以看到3和8,10和12的位置是不匹配的,但数据是一致的。

排序具体的方法如下:

            IDataSet dstExpected = new XlsDataSet(new FileInputStream(TEST_PATH +"expected01.xls"));
            FlatXmlDataSet.write(dstExpected,new FileOutputStream("D:\logs\dstExpected20200211.xml")); 
            
            IDataSet dstActual = new XlsDataSet(new FileInputStream(TEST_PATH +"prepare01.xls"));
            FlatXmlDataSet.write(dstActual,new FileOutputStream("D:\logs\dstActual20200211.xml")); 
            
            SortedTable actualTable=new SortedTable(dstActual.getTable("REDELIVERY_REQUEST"),new String[]{"col1","col2"});
            actualTable.setUseComparable(true);

            SortedTable expectedTable=new SortedTable(dstExpected.getTable("REDELIVERY_REQUEST"),new String[]{"col1","col2"});
            expectedTable.setUseComparable(true);
                    
            Assertion.assertEquals(expectedTable, expectedTable);

参考资料的提示是按一列排序,我在本地试了不成功,按两列排序后才得以通过,这是本例和资料有差异的关键所在。

如果XLS文件中存在多于两列的情况,按以上方法排序也能成功。

参考资料:

https://blog.csdn.net/zhangyz_6719369/article/details/38053141

--2020-02-11--

原文地址:https://www.cnblogs.com/heyang78/p/12294375.html