在rspec中,您可以使用instance_double来确保您的期望是有效的 - 换句话说,如果我有:
java.util.concurrent
我能做到
class Foo
def bar
end
end
我知道如果我从dbl = instance_double('Foo')
expect(dbl).to receive(:bar)
...
中移除bar
方法,我的测试会抛出错误,阻止我无声地破坏。
如何使用类方法实现同样的效果?我只是意外地导致了我的测试没有捕获的错误,因为我做了以下操作:
Foo
测试:
class Foo
def self.bar
end
end
没有出现任何错误,因为我通过上述期望添加了一个存根,但实际上该方法并不存在。我知道我可以expect(Foo).to receive(:baz)
Foo.baz
,但class_double
在我的代码的另一部分调用,而不是在我的测试中调用,因此我无法调用{{1}而不是实际的类。
答案 0 :(得分:1)
您要做的是启用部分双重验证:
RSpec.configure do |config|
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
这会导致部分双打与通过object_double
创建的双打具有相同的行为。