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

tec*_*b12 3 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());
Run Code Online (Sandbox Code Playgroud)

输出是假的,我本以为它是真的.那我哪里出错了?

dka*_*zel 5

DateTimeUtils.setCurrentMillisFixed() 不会改变结果 System.currentTimeMillis()

这个想法是你应该调用的所有代码,System.currentTimeMillis()而不是DateTimeUtils.currentTimeMillis()默认调用,System.currentTimeMillis()除非你告诉它使用固定的时间戳.

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

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

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