如何覆盖junits中的当前系统日期

时间:2010-12-01 16:30:00

标签: java swing junit

我希望将当前系统日期覆盖到我的Junits.Please帮助中。

5 个答案:

答案 0 :(得分:2)

我使用的一种技术是不调用通常的日期/日历工厂方法/构造函数,也不调用System.getCurrentTimeMillis。相反,我注入了一个日期/时间“工厂”,即一个接口,其中包含了获取系统时间所需的任何方法。

然后在测试期间我注入一个我直接控制的实例(硬编码时间,甚至将其存储在文件中,具体取决于我正在测试的内容)。否则,我会注入一个实现,对系统进行适当的实际调用。

它的工作量不如听起来那么多,并使测试时间/日期敏感的代码相当简单。

答案 1 :(得分:1)

不是一个真正的答案,但也许你的代码应该被更改,而不是你必须在日期中作为参数修改日期对象,这样你就可以传入任何你想要的单元测试方法/代码。

另一种选择是制作某种类型的日期界面然后模拟出来以返回你想要的任何东西,如果它不是最终的话,mockito可以让你制作一个虚拟日期对象然后你可以得到它返回任何你想要的。

答案 2 :(得分:1)

您可以使用Powermock,它允许模拟静态和最终方法。

答案 3 :(得分:0)

我不确定你是如何得到你的系统日期的,但只是一个想法:你有没有尝试使用Mocks(EasyMock / Mockito)?

答案 4 :(得分:0)

如果您使用Joda time,则可以override the time在构建DateTime和其他类时使用。实际上,您使用Joda作为日期和时间对象的工厂。

使用Joda比使用设计糟糕的JDK Calendar类更受青睐。