Joda Time 有一个很好的 DateTimeUtils.setCurrentMillisFixed() 来模拟时间。
在测试中非常实用。
Java 8 的 java.time API 中是否有等效项?
原文由 neu242 发布,翻译遵循 CC BY-SA 4.0 许可协议
Joda Time 有一个很好的 DateTimeUtils.setCurrentMillisFixed() 来模拟时间。
在测试中非常实用。
Java 8 的 java.time API 中是否有等效项?
原文由 neu242 发布,翻译遵循 CC BY-SA 4.0 许可协议
我使用了一个新类来隐藏 Clock.fixed
创建并简化测试:
public class TimeMachine {
private static Clock clock = Clock.systemDefaultZone();
private static ZoneId zoneId = ZoneId.systemDefault();
public static LocalDateTime now() {
return LocalDateTime.now(getClock());
}
public static void useFixedClockAt(LocalDateTime date){
clock = Clock.fixed(date.atZone(zoneId).toInstant(), zoneId);
}
public static void useSystemDefaultZoneClock(){
clock = Clock.systemDefaultZone();
}
private static Clock getClock() {
return clock ;
}
}
public class MyClass {
public void doSomethingWithTime() {
LocalDateTime now = TimeMachine.now();
...
}
}
@Test
public void test() {
LocalDateTime twoWeeksAgo = LocalDateTime.now().minusWeeks(2);
MyClass myClass = new MyClass();
TimeMachine.useFixedClockAt(twoWeeksAgo);
myClass.doSomethingWithTime();
TimeMachine.useSystemDefaultZoneClock();
myClass.doSomethingWithTime();
...
}
原文由 LuizSignorelli 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
最接近的是
Clock
对象。您可以使用任何您想要的时间(或从系统当前时间)创建一个 Clock 对象。所有 date.time 对象都重载了now
采用时钟对象代替当前时间的方法。所以你可以使用依赖注入来注入一个特定时间的时钟:有关详细信息,请参阅 时钟 JavaDoc