为了测试时间相关的代码这是很好的使用Virtual Clock Pattern在测试中使用DateTimeUtils.setCurrentMillisFixed安全吗?
的想法是,我们拉当前时间不使用new Date
,但可与虚拟时钟返回预定的固定时间被嘲笑的时钟。
现在,在Java中,我们有JodaTime与DateTime
类和允许设置的采样时间与
DateTimeUtils.setCurrentMillisFixed(today.getMillis());
和固定时间重置为系统时间:
DateTimeUtils.setCurrentMillisSystem();
这里是一个good article关于如何将它与TestNG一起使用。
现在的问题!
如果在全局上下文中为运行测试时间设置全局上下文中的固定时间,那么将此技术与setUp和tearDown方法一起使用有多安全。只要我得到它 - 只要我们没有两个并行测试,并行运行在相同环境中的这种技术,它就会工作。
如果您使用threeten([jodatime的后继](http://stackoverflow.com/a/4633326/829571))或java 8,则有一个内置的['Clock'类用于此目的](http ://download.java.net/jdk8/docs/api/java/time/Clock.html) – assylias
正如您所说的,并行运行测试并不可靠。如果测试按顺序运行并按照您提到的方式修改测试,则这非常安全。 – skirsch