我必须编写测试用例来检查某些查询的工作情况,比如检索日期为今天、下周、上一年等的记录。
它基本上是一个 junit 测试用例,我正在通过以下方式实现:
1.Inserting records with date corresponding to TODAY,NEXT_WEEK,PREVIOUS_YEAR
2.So, I will know for a particular query, what are the records to be returned, I will execute the query, retrieve the records for a particular condition and check it for the correct records.
在此过程中,在执行今天的案例时,我遇到了问题。
如果我在午夜(例如 11.59)之前运行测试用例,将会发生第一次数据插入,这将插入一个日期,例如 24-4-2012T11:59:00.00
在执行查询之前,日期变为明天,即 25-4-2012T00:00:00.00
TODAY 条件将执行 25 号而不是 24 号的查询。所以我的测试用例失败了。
如何解决这个问题?
最佳答案
How can I resolve this problem ?
编写更多可测试的代码:)
我的猜测是,您正在使用 System.currentTimeMillis()
、Calendar.getInstance()
或类似的方法获取“当前日期”。该代码无法轻易被拦截来为您提供“您想要的任何值”。相反,引入一个 Clock
接口(interface),其中包含一个方法(now()
或类似的方法),返回您想要使用的“现在”的任何表示形式。 (就我个人而言,我会使用 Joda Time 中的 Instant
,但这取决于您。)
现在将Clock
注入(inject)到您要测试的代码中,例如作为参数构造函数。对于测试,使用 stub 实现,它返回您想要的任何内容。对于生产,请使用“真实”实现。
关于java - 日期和日期时间处理 - 特定场景失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10292579/