JodaTime setCurrentMillisFixed(millis)没有像想象的那样工作

时间:2015-06-30 20:04:45

标签: java junit jodatime

我正在玩Joda Time进行JUnit测试,以便绕过"绕过"我的代码中的超时窗口。我似乎并没有真正理解Joda Time的工作原理 - 我的代码:

// TIMEOUT is "1000 * 90"
long Time = System.currentTimeMillis();
DateTimeUtils.setCurrentMillisFixed(Time + TIMEOUT + 1);
DateTimeUtils.setCurrentMillisSystem();
System.out.println((Time+TIMEOUT) < System.currentTimeMillis());

输出是假的,我原以为它是真的。那么我哪里出错了?

1 个答案:

答案 0 :(得分:5)

DateTimeUtils.setCurrentMillisFixed()不会更改System.currentTimeMillis()

的结果

这个想法就是你所谓的System.currentTimeMillis()所谓的代码应该改为使用DateTimeUtils.currentTimeMillis(),默认情况下会调用System.currentTimeMillis(),除非你告诉它使用固定的时间戳。

此外,大多数使用超时的代码都会直接调用System.currentTimeMillis(),因此您无法使用Jodatime来更改超时时间。

Jodatime方法的目的是能够更好地测试依赖于日期或时间的代码。例如,如果我的代码在工作时间或周末之后做了不同的事情,我可以让我的测试代码看起来就像我想测试的那样(只要代码使用DateTimeUtils.currentTimeMillis()来看看是什么时间/日期是。)

同样DateTimeUtils.setCurrentMillisSystem();更改DateTimeUtils.currentTimeMillis()方法以返回使用System.currentTimeMillis()而不是您设置固定时间的任何内容。因此,即使JodaTime表现得像你想象的那样,你也可以在测试断言之前重置时间