【发布时间】:2010-10-17 09:00:22
【问题描述】:
为获取当前时间的代码编写单元测试的最佳方法是什么?例如,某些对象可能仅在工作日创建,其他对象在检查执行某些操作的权限时会考虑当前时间等。
我想我应该模拟 Date.today 和 Time.now。这是正确的方法吗?
更新:(a) Time.is 和 (b) Time.stubs(:now).returns(t) 两种解决方案都有效。 (a) 是非常好的方法,但 (b) 解决方案将与其他测试代码更加一致。
在question,作者要求提供通用解决方案。对于 Ruby,在我的选项中,上述两个解决方案是 simpler,因此比提取获取当前日期/时间的代码更好。
顺便说一句,我建议使用Chronic 来获得所需的时间,例如
require 'Chronic'
mon = Chronic.parse("next week monday")
Time.stubs(:now).returns(mon)
【问题讨论】:
-
为什么不能是社区wiki?
-
它可以,但是对于大多数特定的编程问题,它并没有完成,因此人们可以获得声誉。我没有答案,所以它不会影响我,但我很好奇。
-
不是真正的重复,因为这个问题是特定于 Ruby 的。但是上面的链接可能会有所帮助。
标签: ruby-on-rails ruby unit-testing datetime