如何覆盖/控制JVM获取系统日期的方式?

Abe*_*los 4 junit unit-testing jvm date

你如何模拟/欺骗JVM以获得当前系统日期之外的日期?我在JUnit中有一组测试我不想改变,但我想改变一个设置,这样当JVM检索日期时它会检索我想要的日期.

你之前做过类似的事吗?

谢谢.

jay*_*hao 5

有几种方法可以做到这一点:

  • 如果你可以重写代码 - 正如其他一些答案所提到的,基本上你需要一个可配置的NowProvider,DateFactory或其他策略(我喜欢注入NowProvider.now()作为System.currentTimeMillis的dropin替代品)

  • Powermock和其他一些工具包可以让你使用ClassLoader技巧来覆盖静态方法,甚至是系统方法