我尝试使用 RSpec2 测试一个具有一些私有方法的类,这些方法是从一些公共方法调用的。我用
@foo.should_receive(:start_training).exactly(2).times
如果他们被调用以及多久调用一次。我的问题是,这种方法不适用于私有方法。那么,有什么方法可以@foo.send(:private_method)
结合使用 sth likeshould_receive
吗?或者任何其他语法?
我尝试使用 RSpec2 测试一个具有一些私有方法的类,这些方法是从一些公共方法调用的。我用
@foo.should_receive(:start_training).exactly(2).times
如果他们被调用以及多久调用一次。我的问题是,这种方法不适用于私有方法。那么,有什么方法可以@foo.send(:private_method)
结合使用 sth likeshould_receive
吗?或者任何其他语法?
should_receive(:method)
无论 的可见性:method
是公开的还是私有的,都可以使用。
您可以使用allow_any_instance_of
方法来存根或模拟类的任何实例,例如,您有一个带有一些方法的class
命名,而不是您可以执行类似这样的操作Foo
private
allow_any_instance_of(Foo).to receive(:private_method) do
#do something
end
如果你module
也有,你可以做这样的事情
allow_any_instance_of(Module::Foo).to receive(:private_method) do
#do something
end
您可以在官方文档allow_any_instance_of()
中找到有关方法的更多详细信息
为什么要测试私有方法?他们是私人的是有原因的;以防止来自外部呼叫的访问。测试依赖于私有方法的公共方法就足够了。
坏消息是:你不能存根私有方法。
好的是:您可以制作自己的方法protected
,然后以通常的方式对其进行存根;
allow_any_instance_of(described_class).to(
receive(:my_protected_method_name).and_return("foo_bar")
)