cri*_*spy 8 ruby recursion rspec mocking
我想测试一个方法是用一个特定的参数递归调用的.
我的方法:
class Recursable
def rec(arg)
rec(7) unless arg == 7
end
end
describe Recursable do
it "should recurse" do
r = Recursable.new('test')
r.should_receive(:rec).with(0).ordered
r.should_receive(:rec).with(7).ordered
r.rec(0)
end
end
Run Code Online (Sandbox Code Playgroud)
出乎意料的是,RSpec失败了:
expected :rec with (7) once, but received it 0 times
Run Code Online (Sandbox Code Playgroud)
知道我的方法有什么问题吗?如何使用特定参数测试有效递归?
Nic*_*wis 10
您的测试现在的问题是您正在试验您要测试的方法.r.should_receive(:rec)正在替换r#rec存根,当然这个存根不会调用r.rec(7).
更好的方法是简单地测试初始方法调用的结果是否正确.只要它最终给出了正确的答案,该方法是否可以递归,迭代或给朋友打电话都不应该严格.