我需要测试一个函数,它的结果将取决于当前时间(使用 Joda 时间的 isBeforeNow()
,它确实发生了)。
public boolean isAvailable() {
return (this.someDate.isBeforeNow());
}
是否可以使用(例如使用 Mockito) stub /模拟系统时间,以便我可以可靠地测试该功能?
最佳答案
使您的代码可测试的最佳方法 (IMO) 是将“当前时间是多少”的依赖关系提取到其自己的接口(interface)中,其中一个实现使用当前系统时间(正常使用),一个实现让您设置时间,根据需要提前等。
我在各种情况下都使用过这种方法,而且效果很好。它很容易设置 - 只需创建一个界面(例如 Clock
),它有一个方法可以以您想要的任何格式为您提供当前瞬间(例如使用 Joda Time,或者可能是 Date
)。
关于java - 时间相关的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622194/