与时间相关的单元测试
我需要测试一个函数,其结果将取决于当前时间(使用Joda时间,它就是这样发生的)。isBeforeNow()
public boolean isAvailable() {
return (this.someDate.isBeforeNow());
}
是否可以使用(例如使用Mockito)来存根/模拟系统时间,以便我可以可靠地测试该函数?
我需要测试一个函数,其结果将取决于当前时间(使用Joda时间,它就是这样发生的)。isBeforeNow()
public boolean isAvailable() {
return (this.someDate.isBeforeNow());
}
是否可以使用(例如使用Mockito)来存根/模拟系统时间,以便我可以可靠地测试该函数?
使代码可测试的最佳方法(IMO)是将“当前时间”的依赖关系提取到其自己的接口中,其实现使用当前系统时间(正常使用)和实现,允许您设置时间,根据需要推进它等。
我在各种情况下都使用过这种方法,并且效果很好。设置起来很容易 - 只需创建一个界面(例如 ),该界面具有单一方法,可以以您想要的任何格式为您提供当前即时(例如,使用Joda Time,或者可能是一个)。Clock
Date
Joda时间支持通过类的和方法设置“假”当前时间。setCurrentMillisFixed
setCurrentMillisOffset
DateTimeUtils
查看 https://www.joda.org/joda-time/apidocs/org/joda/time/DateTimeUtils.html