JodaTime setCurrentMillisFixed(millis) 没有像想象的那样工作
JodaTime setCurrentMillisFixed(millis) not working as thought
我正在使用 Joda Time 进行 JUnit 测试,以便 "bypass" 我的代码中的超时 Window。我似乎不太了解 Joda Time 的工作原理 - 我的代码:
// TIMEOUT is "1000 * 90"
long Time = System.currentTimeMillis();
DateTimeUtils.setCurrentMillisFixed(Time + TIMEOUT + 1);
DateTimeUtils.setCurrentMillisSystem();
System.out.println((Time+TIMEOUT) < System.currentTimeMillis());
输出是假的,我本以为它是真的。那我哪里错了?
DateTimeUtils.setCurrentMillisFixed()
不会改变 System.currentTimeMillis()
的结果
我们的想法是,您所有调用 System.currentTimeMillis()
的代码都应该使用 DateTimeUtils.currentTimeMillis()
,除非您告诉它使用固定时间戳,否则默认调用 System.currentTimeMillis()
。
此外,大多数使用超时的代码将直接调用 System.currentTimeMillis()
,因此您不能使用 Jodatime 更改超时时间。
Jodatime 方法的目的是能够更好地测试依赖于日期或时间的代码。例如,如果我的代码在下班后或周末做了一些不同的事情,我可以让我的测试代码看起来像是我想测试的任何时间(只要代码使用 DateTimeUtils.currentTimeMillis()
来查看什么time/date 是。)
同时 DateTimeUtils.setCurrentMillisSystem();
更改了 DateTimeUtils.currentTimeMillis() 方法以返回到使用 System.currentTimeMillis() 而不是您设置的固定时间。因此,即使 JodaTime 的行为与您想象的一样,您还是会在测试断言之前将时间重置回来
我正在使用 Joda Time 进行 JUnit 测试,以便 "bypass" 我的代码中的超时 Window。我似乎不太了解 Joda Time 的工作原理 - 我的代码:
// TIMEOUT is "1000 * 90"
long Time = System.currentTimeMillis();
DateTimeUtils.setCurrentMillisFixed(Time + TIMEOUT + 1);
DateTimeUtils.setCurrentMillisSystem();
System.out.println((Time+TIMEOUT) < System.currentTimeMillis());
输出是假的,我本以为它是真的。那我哪里错了?
DateTimeUtils.setCurrentMillisFixed()
不会改变 System.currentTimeMillis()
我们的想法是,您所有调用 System.currentTimeMillis()
的代码都应该使用 DateTimeUtils.currentTimeMillis()
,除非您告诉它使用固定时间戳,否则默认调用 System.currentTimeMillis()
。
此外,大多数使用超时的代码将直接调用 System.currentTimeMillis()
,因此您不能使用 Jodatime 更改超时时间。
Jodatime 方法的目的是能够更好地测试依赖于日期或时间的代码。例如,如果我的代码在下班后或周末做了一些不同的事情,我可以让我的测试代码看起来像是我想测试的任何时间(只要代码使用 DateTimeUtils.currentTimeMillis()
来查看什么time/date 是。)
同时 DateTimeUtils.setCurrentMillisSystem();
更改了 DateTimeUtils.currentTimeMillis() 方法以返回到使用 System.currentTimeMillis() 而不是您设置的固定时间。因此,即使 JodaTime 的行为与您想象的一样,您还是会在测试断言之前将时间重置回来