它是写私人的方法测好的做法呢?
考虑下面简单的例子:
class Group
has_many :members
private
def release_members
members.each { |member| member.update_attributes group_id: nil }
end
end
会是很好的做法写在RSpec中的release_members方法的测试? 我相信你不得不编写测试调用与发送,即方法。 group.send(:release_members)
其有时令人难以接受的。
你可以找到的,一个深入的讨论,从桑迪梅斯谈这些幻灯片非常课题。
https://speakerdeck.com/skmetz/magic-tricks-of-testing-railsconf
她说,你可以试驾您的私有方法,如果你喜欢,但你应该担心的唯一的测试是那些测试的公共接口。 否则,你可能太紧密耦合落实。
我认为TOCH点,上分裂出去的服务和价值目标,并把那些在测试中也是,如果你正在担心未测试复杂的私有方法是好的。
因为他们属于类的内部机制,你不应该测试私有方法。 单元测试的目的是检查你的类的行为通过其接口与互动时,也就是它的公共方法如预期。
如果在某一点你不舒服长的私人方法,有可能是因为你在这里有机会扳指逻辑类外另筑模块或类。 然后,您可以单元测试,再次只有它的接口,也就是它的公共方法。
在某些罕见的情况下,有必要测试的私有方法,因为整个内部逻辑是非常复杂的,你想分裂的问题。 但是,在99.9%,测试私有方法是一个坏主意。