我正在玩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());
输出是假的,我原以为它是真的。那么我哪里出错了?
答案 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表现得像你想象的那样,你也可以在测试断言之前重置时间