【发布时间】:2011-08-25 23:36:25
【问题描述】:
我正在使用默认的 Rails 测试。
在一项测试中,我重载了 Date.today 方法:
class Date
def self.today
Date.new(2011,7,19)
end
end
这对于该文件中的测试非常有效,但会延续到其他测试并导致它们失败。如何将此代码的效果限制在单个文件中?
我认为这可能不是进行测试的最佳方式。有没有推荐的分步教程?
谢谢。
Rails 3.07
【问题讨论】:
-
你可能想要一个模拟对象。搜索 Ruby mock object gems,有几个可供选择。
-
另外,如果这仅适用于日期和时间,请参阅gist.github.com/1033857(您可以尝试 Timecop,但我会警告您,它与 DST 存在问题,可能并且会破坏您的测试)。
-
Mocha 如何重载 Date 对象?您如何防止该覆盖延续到其他测试?代码去哪儿了?在测试文件中的测试类之前?在测试帮助文件中?
-
见mocha.rubyforge.org/examples/misc.html 的例子。
Date.expects(:today).returns(Date.new(2011, 7, 19))。您不需要重置任何东西......它会挂接到单元测试框架中以在测试完成后重置。 -
谢谢,它成功了(使用
stubs而不是expects)。
标签: ruby-on-rails ruby-on-rails-3 unit-testing tdd overloading