java - 日期和日期时间处理 - 特定场景失败

标签 java date junit

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

它基本上是一个 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/

相关文章:

java - @Rule 是做什么的?

java - Windows 上的 Java 控制面板如何与机器上安装的许多不同版本的 Java 结合使用?

java - 我们可以测试对象在 Oracle Coherence 中的存在吗?

java - 何时抛出 IllegalStateException 与 IllegalArgumentException?

linux - 在 linux bash 脚本中的 awk 中执行日期实用程序

PHP DateTime::modify 加减月份

java - 使用 EntityManager 对实体设置悲观锁

javascript - 如何以特定间隔解析 D3 上的日期

java - JUnit FindById 返回空指针(Mockito)

java - 如何使用带有类的构造函数模拟对象?