0

我将不得不编写测试用例来检查一些查询的工作情况,比如检索日期为今天下一周、上一年等的记录。

它基本上是一个junit测试用例,我通过以下方式实现:

1.插入日期对应TODAY,NEXT_WEEK,PREVIOUS_YEAR的记录

2.所以,我会知道对于特定查询,要返回的记录是什么,我将执行查询,检索特定条件的记录并检查它是否有正确的记录。

在这个过程中,在执行 TODAY 的案例时,我遇到了一个问题。

如果我在午夜之前运行我的测试用例,比如 11.59,将首先插入数据,这将插入一个日期,比如 24-4-2012T11:59:00.00

而在执行查询之前,日期变为明天,即 25-4-2012T00:00:00.00

TODAY 条件将使用 25 日而不是 24 日执行查询。所以我的测试用例失败了。

我该如何解决这个问题?

4

2 回答 2

5

我该如何解决这个问题?

编写更多可测试的代码:)

我的猜测是你正在使用“当前日期”System.currentTimeMillis()Calendar.getInstance()类似的东西。该代码不容易被截获以给您“您想要的任何价值”。相反,引入一个Clock带有单个方法(now()或类似方法)的接口,返回您想要使用的“现在”的任何表示。(我个人会InstantJoda Time使用,但这取决于你。)

现在将 aClock注入您要测试的代码中,例如作为参数构造函数。对于测试,使用一个存根实现,它返回你想要的任何东西。对于生产,请使用“真实”实现。

于 2012-04-24T06:19:30.343 回答
0

比方说,您使用new Date()今天的概念。您应该保留比较日期;我相信这是问题的根源,您需要在查询执行之前和之后保留预期值以便可测试/可验证:

Date today = new Date();

// update the data layer using today

Date recordedDate = // fetch the date that is recorded

assertEquals(today, recordedDate);

据推测,您将使用其他一些工具,例如java.util.Calendar计算问题中提到的时间点。

于 2012-04-24T06:21:03.673 回答