我尝试使用RSpec2测试一个类,该类有一些私有方法,这些方法是从一些公共方法调用的。我测试公共方法RSpec:存根专用方法
@foo.should_receive(:start_training).exactly(2).times
如果他们被调用和多久。我的问题是,这种方法不适用于私人方法。那么,有没有办法像@foo.send(:private_method)
和should_receive
一起使用?或者其他语法?
我尝试使用RSpec2测试一个类,该类有一些私有方法,这些方法是从一些公共方法调用的。我测试公共方法RSpec:存根专用方法
@foo.should_receive(:start_training).exactly(2).times
如果他们被调用和多久。我的问题是,这种方法不适用于私人方法。那么,有没有办法像@foo.send(:private_method)
和should_receive
一起使用?或者其他语法?
should_receive(:法)的作品是否:方法是公共的或私人...
为什么要测试私有方法?他们是私人的原因;以防止来自外部呼叫的访问。测试依赖私有方法的公共方法应该足够了。
我非常肯定它值得测试私有方法。否则,如果你有10个公共方法依赖于这个私有方法,那么你最终可能会重复自己测试所有这些方法公有的行为。 – 2014-04-09 15:33:02
@AndréHerculano是的,但你应该测试行为,而不是执行。无论使用什么私有方法,您都会测试这些公共方法的回报。 – 2015-06-16 16:45:39
您可以使用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()
方法的详细信息Official Documentation
eehmm ...我相信它的工作原理。你能解释一下你的意思吗? – 23tux 2013-02-20 18:32:23
我试过了,当我试着用私有方法调用should_receive时,我得到'私有方法'start_training'调用#<运行:0x007f7f7e2ebe68>' – 23tux 2013-02-20 19:14:16
你可以发布多一点的代码吗?在规范我正在atm工作,我should_receive'ing私人方法,没有问题... – 2013-02-20 20:44:17