【发布时间】:2014-01-23 19:40:27
【问题描述】:
为了测试与时间相关的代码,最好使用Virtual Clock Pattern
我们的想法是,我们不使用new Date,而是从一个时钟中提取当前时间,该时钟可以使用返回预定义固定时间的虚拟时钟进行模拟。
现在在 Java 中,我们有带有 DateTime 类的 JodaTime,它允许使用
DateTimeUtils.setCurrentMillisFixed(today.getMillis());
并将固定时间重置为系统时间:
DateTimeUtils.setCurrentMillisSystem();
这是一个good article,介绍如何将它与 TestNG 一起使用。
现在是问题!
如果在全局上下文中为运行测试的时间全局设置固定时间,那么将此技术与 setUp 和 tearDown 方法一起使用是多么安全。只要我明白了——它只有在我们没有两个并发测试的情况下才能工作,并且这种技术在同一环境中并行运行。
【问题讨论】:
-
如果你使用threeten(successor of jodatime)或者java 8,有一个内置的
Clockclass for that purpose -
正如您所说,并行运行测试不会可靠地工作。如果测试按顺序运行并按照您提到自己的方式装饰测试,这是非常安全的。
标签: java junit testng jodatime