代码之家  ›  专栏  ›  技术社区  ›  VestniK

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

  •  13
  • VestniK  · 技术社区  · 14 年前

    我想知道是否有任何方法可以在dbunitxml数据集中指定例如明天作为日期。有时代码逻辑对于将来的日期和过去的日期是不同的,我想测试这两种情况。当然,我可以指定一些像2239年11月5日,并确保测试将工作到这个日期,但有更优雅的方式。

    2 回复  |  直到 14 年前
        1
  •  25
  •   loyalBrown    14 年前

    我刚开始使用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));
    

    现在,当测试运行时,用户的创建数据总是设置为运行测试前两天。

    希望这有帮助。祝你好运。

        2
  •  1
  •   Henrique    5 年前

    我就是这么做的:

    首先我需要删除注释,现在您需要使用以下代码以编程方式启动此.xml文件:

    @Inject
    protected DataSource dataSource;
    
    @Before
    public void setUp() throws Exception {
            DataSourceDatabaseTester dataSourceDatabaseTester = new DataSourceDatabaseTester(dataSource);
            IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(getClass().getResource(DATASET_FILE_LOCATION).getPath()));
            ReplacementDataSet rDataSet = new ReplacementDataSet(dataSet);
            rDataSet.addReplacementObject("{$today}", new Date());
            dataSourceDatabaseTester.setDataSet(rDataSet);
            dataSourceDatabaseTester.onSetup(); 
    }
    

        3
  •  1
  •   ave    4 年前

    dbunit2.7.0中添加了一个新的相对日期/时间语法,您现在可以编写 [now+1d]

    <dataset>
      <user create_date="[now+1d]"/>
    <dataset>
    

    医生在这里:
    http://dbunit.sourceforge.net/datatypes.html#relativedatetime

    文档中的几个示例:

    • [现在]:当前日期时间
    • [现在+1y+1M-2h]:从今天起一年零一个月,提前两个小时
        4
  •  0
  •   khmarbaise    14 年前

    你可以用 add() of Calendar