一尘不染

相对于DBUnit数据集中的当前日期

java

我想知道是否有任何方法可以指定例如明天作为DBUnit
XML数据集中的日期。有时,代码逻辑对于将来的日期和过去的日期是不同的,我想测试两种情况。可以肯定地说,我可以指定类似2239年11月5日这样的名称,并确保测试可以一直进行到此日期,但是还有更优雅的方法。

在Java开发期间,我还没有遇到过这种情况,但是有一次我经历过代码逻辑在日期前一天,日期前两天以及日期前两天以上不同的情况。在这种情况下,编写数据库驱动的测试的唯一可能解决方案是在数据导入期间插入相对日期。

DBUnit是否为此提供了任何便利?


阅读 162

收藏
2020-12-03

共1个答案

一尘不染

我刚开始使用DBUnit,并且正在寻找类似的功能。不幸的是,框架中似乎没有针对日期的表达语言。但是,我确实找到了使用DBUnit的ReplacementDataSet类的合适的解决方法。此类采用IDataSet对象,并公开用于替换IDataSet对象从数据集文件中提取的对象的方法。

资料集

<dataset>
    <user first_name="Dan"
          last_name="Smith"
          create_date="[create_date]"/>
<dataset>

源代码

String dataSetFile = "testDataFile.xml";
IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(dataSetFile));
ReplacementDataSet rDataSet = new ReplacementDataSet(dataSet);
Set<String> keys = dataSetAdjustments.keySet();
rDataSet.addReplacementObject("[create_date]", DateUtils.addDays(new Date(), -2));

现在,运行测试时,用户的创建数据将始终设置为运行测试前两天。

希望这可以帮助。祝好运。

2020-12-03