我有一个包含一堆方法的类,我已经为每个方法编写了单元测试。该类中的主要方法是encrypt
方法,它接收消息并对其进行加密。我还写了这个加密方法使用的其他5种方法,但我不希望用户能够调用这些方法,我只想在加密方法中使用它们来完成工作,但是我不希望用户像@ obj.some_method_that_is_not_encrypt一样,我想只调用encrypt
方法,我知道我可以将这些方法设为私有,但是我的单元测试会失败。我该如何处理这个问题?
答案 0 :(得分:1)
您的单元测试可以使用Object#send(...)
来调用私有方法:
class Foo
private
def bar
"ok"
end
end
f = Foo.new
f.bar # => NoMethodError: private method `bar' called...
f.send(:bar) # => "ok"
所以你的#34;加密"方法可能是唯一的公共方法,但它仍然可以使用未向您的库的礼貌用户公开的私有方法(当然,如果他们愿意,他们也可以使用send
)。
还要注意"私人"的特殊方面。方法是,即使在同一个类中,也不能使用显式接收器调用它们。因此,您无法致电self.my_private_method
,而只需致电my_private_method
即可。例如:
class Foo
def foo
self.bar # => NoMethodError: private method `bar' called...
bar # => "ok"
end
private
def bar; "ok"; end
end