鉴于父类Fruit
及其子类Apple
和Banana
,是否可以存根foo
中定义的方法Fruit
,以便任何在foo
和Apple
的任何实例上调用方法Banana
都是存根的?
class Fruit
def foo
puts "some magic in Fruit"
end
end
class Banana < Fruit
...
end
class Apple < Fruit
...
end
Fruit.any_instance.stubs(:foo)
不起作用,看起来它只是Fruit的实例的存根。除了为每个子类调用存根之外,还有一种简单的方法来实现这个目的吗?
发现此链接提出了类似的问题,但看起来还没有得到答复。 http://groups.google.com/group/mocha-developer/browse_thread/thread/99981af7c86dad5e
答案 0 :(得分:9)
这可能不是最干净的解决方案,但它有效:
Fruit.subclasses.each{|c| c.any_instance.stubs(:foo)}
答案 1 :(得分: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)
答案 2 :(得分:0)
更新:
Fruit.subclasses.each do |klass|
allow_any_instance_of(klass).to receive(:foo).and_return(<return_value>)
end