日期和日期时间处理 - 特定方案失败

Sow*_*iya 0 java junit date

我将不得不编写测试用例来检查一些查询的工作情况,这些查询会检索今天有日期的记录,next_week,previous_year等.

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

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

2.因此,我将知道一个特定的查询,要返回的记录是什么,我将执行查询,检索特定条件的记录并检查它是否正确记录.

在这个过程中,在执行TODAY的情况下,我遇到了一个问题.

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

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

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

我该如何解决这个问题?

Jon*_*eet 5

我该如何解决这个问题?

写更多可测试的代码:)

我的猜测是,你正在做的"当前日期"使用System.currentTimeMillis(),Calendar.getInstance()或类似的东西.该代码不容易被截获,以"给你任何你想要的价值".相反,引入一个Clock具有单个方法(now()或类似的东西)的接口,返回您想要使用的"now"的任何表示.(我个人会使用Instant来自约达时间,但它给你.)

现在将一个a Clock注入要测试的代码中,例如作为参数构造函数.对于测试,使用存根实现,它返回您想要的任何内容.对于生产,使用"真实"实现.