你有没有遇到过这种情况:
需要测试软件的某些日期相关功能,软件依靠操作系统获取当前日期,因此我们必须更改操作系统的日期,但日期和时间时间实际上是任何操作系统中的关键服务,更改日期和时间。操作系统的时间可能会导致问题,例如某些应用程序服务器检查上次修改日期以决定是否重新编译JSP文件。
是否有任何聪明的方法来处理此类问题,例如设置日期和时间JVM级别或应用程序级别的时间?
答案 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()
}