9

给定一个父类Fruit及其子类Appleand Banana,是否可以存根foo定义在 中的方法Fruit,以便对and的foo任何实例的任何方法调用都被存根?AppleBanana

class Fruit
  def foo
    puts "some magic in Fruit"
  end
end
class Banana < Fruit
  ...
end
class Apple < Fruit
 ...
end

Fruit.any_instance.stubs(:foo)没有工作,看起来它只是水果实例的存根。除了为每个子类调用存根之外,有没有一种简单的方法来实现这一点?

发现这个链接提出了类似的问题,但看起来还没有回答。 http://groups.google.com/group/mocha-developer/browse_thread/thread/99981af7c86dad5e

4

3 回答 3

9

这可能不是最干净的解决方案,但它有效:

Fruit.subclasses.each{|c| c.any_instance.stubs(:foo)}
于 2011-09-25T18:32:50.163 回答
0

如果您的子类有子类,您可能必须递归地遍历它们。我做了这样的事情:

def stub_subclasses(clazz)
  clazz.any_instance.stubs(:foo).returns(false)
  clazz.subclasses.each do |c|
    stub_subclasses(c)
  end
end
stub_subclasses(Fruit)
于 2014-05-02T18:02:03.810 回答
0

Rspec 3.6的@weexpectedTHIS答案 更新:

 Fruit.subclasses.each do |klass|
    allow_any_instance_of(klass).to receive(:foo).and_return(<return_value>)
 end
于 2017-06-23T12:24:53.607 回答