删除时间& java应用程序中对os的日期依赖

时间:2016-12-31 10:00:05

标签: java

你有没有遇到过这种情况:

需要测试软件的某些日期相关功能,软件依靠操作系统获取当前日期,因此我们必须更改操作系统的日期,但日期和时间时间实际上是任何操作系统中的关键服务,更改日期和时间。操作系统的时间可能会导致问题,例如某些应用程序服务器检查上次修改日期以决定是否重新编译JSP文件。

是否有任何聪明的方法来处理此类问题,例如设置日期和时间JVM级别或应用程序级别的时间?

1 个答案:

答案 0 :(得分:5)

如果您使用Java 8和java.time的类,则可以使用Clock。在正常的应用程序运行时,您可以注入并使用Clock.systemDefaultZone()提供的正常系统时钟,以便测试可以在固定时间内注入Clock实例,例如由Clock.fixed提供或如果您需要更多控制,则继承Clock

然后,您需要将代码更改为:

// Inject this value somehow, eg using Spring
private Clock clock;

public LocalDateTime methodThatGeneratesTime() {
    return LocalDateTime.now(clock); // Instead of just LocalDateTime.now()
}