您是否遇到过这样的场景:
需要测试软件的一些与日期相关的功能,该软件依赖操作系统来获取当前日期,因此我们必须更改操作系统的日期,但日期和时间实际上是任何操作系统中的关键服务,更改日期和时间操作系统的时间可能会引起问题,例如某些应用服务器会检查最后修改日期来决定是否重新编译JSP文件。
是否有任何聪明的方法来处理此类问题,例如在 JVM 级别或应用程序级别设置日期和时间?
最佳答案
如果您使用Java 8和java.time
的类,您可以使用Clock
。在正常的应用程序运行时,您可以注入(inject)并使用由 Clock.systemDefaultZone()
提供的正常系统时钟,对于测试,您可以注入(inject)具有固定时间的 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()
}
关于java - 删除 Java 应用程序中对操作系统的时间和日期依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407292/