我需要测试一个函数,其结果将取决于当前时间(使用Joda时间isBeforeNow()
).
public boolean isAvailable() {
return (this.someDate.isBeforeNow());
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用Mockito存根/模拟系统时间,以便我可以可靠地测试功能?
Jon*_*eet 125
使代码可测试的最佳方法(IMO)是将"当前时间是什么"的依赖关系提取到自己的接口中,使用当前系统时间(正常使用)的实现和允许您设置时间的实现,按你想要的那样推进它等.
我在各种情况下都使用过这种方法,而且效果很好.设置起来很简单 - 只需创建一个接口(例如Clock
),它有一个方法可以以您想要的任何格式为您提供当前时刻(例如使用Joda Time,或者可能是a Date
).
Lau*_*eyn 62
Joda时间支持通过类setCurrentMillisFixed
和setCurrentMillisOffset
方法设置"假"当前时间DateTimeUtils
.
请参阅https://www.joda.org/joda-time/apidocs/org/joda/time/DateTimeUtils.html
xli*_*xli 21
Java 8引入了抽象类java.time.Clock
,允许您使用替代实现进行测试.这正是Jon在当时的回答中提出的建议.
归档时间: |
|
查看次数: |
42080 次 |
最近记录: |