gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:10:41 25 4
gpt4 key购买 nike

我正在使用 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());

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

最佳答案

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

的结果

我们的想法是,您本应调用 System.currentTimeMillis() 的所有代码都应该使用 DateTimeUtils.currentTimeMillis(),它默认调用 System. currentTimeMillis() 除非您告诉它使用固定时间戳。

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

Jodatime 方法的目的是能够更好地测试依赖于日期或时间的代码。例如,如果我的代码在下类后或周末做了一些不同的事情,我可以让我的测试代码看起来像是我想测试的任何时间(只要代码使用 DateTimeUtils.currentTimeMillis() 查看时间/日期。)

此外,DateTimeUtils.setCurrentMillisSystem(); 更改了 DateTimeUtils.currentTimeMillis() 方法以返回使用 System.currentTimeMillis() 而不是您设置的固定时间。因此,即使 JodaTime 的行为与您想象的一样,您还是会在测试断言之前将时间重置

关于java - JodaTime setCurrentMillisFixed(millis) 没有像想象的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com