ruby – Rspec:如何测试递归?

我想测试一个方法是用一个特定的参数递归调用的.

我的方法

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

出乎意料的是,RSpec失败了:

expected :rec with (7) once,but received it 0 times

知道我的方法有什么问题吗?如何使用特定参数测试有效递归?

解决方法

您现在的测试问题是您正在试验您要测试的方法. r.should_receive(:rec)正在用一个存根替换r#rec,这当然不会调用r.rec(7).

更好的方法是简单地测试初始方法调用的结果是否正确.只要它最终给出了正确的答案,该方法是否可以递归,迭代或打电话给朋友,这一点并不严格.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...