ruby - Rspec:如何测试递归?

标签 ruby recursion mocking 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 替换为 stub ,当然它不会调用 r.rec(7).

更好的方法是简单地测试初始方法调用的结果是否正确。该方法是否递归、迭代或给 friend 打电话并不严格,只要它最终给出正确答案即可。

关于ruby - Rspec:如何测试递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621842/

相关文章:

ruby - YouTube api : badContent: Media type 'application/mp4' is not supported. 有效媒体类型 : [video/*, 应用程序/八位字节流]

java - 计算数组中不同元素数量的递归方法

unit-testing - 如何用Moq模拟对具体对象的函数调用?

Ruby:Sinatra 和一个程序中的无限循环

ruby-on-rails - 如何在两个 Rails 模型之间创建关联

Ruby 推送到哈希

php - PHP克隆父子树,从子树开始避免无限递归

java - 任何人都可以想出一种方法来打印此模式而不在方法之外存储数据吗?

c# - 单元测试和数据库

node.js - 使用mockery模拟fs模块