【发布时间】:2013-05-16 23:43:56
【问题描述】:
是的,我知道,测试私有方法不是一个好主意(而且我 阅读这个线程 - http://www.ruby-forum.com/topic/197346 - 和一些 其他)
但是如何测试下面的代码呢?
我使用 xmpp4r。在我的公共方法 #listen 我开始接收 jabber
像这样的消息:
def listen
@client.add_message_callback do |m|
do_things_with_message(m)
end
end
private
def do_things_with_message(m)
#
end
#add_message_callback - 运行块,当消息到来时(在不同的线程中)
所以,测试#listen 方法很困难,它更多地测试 xmpp4r
比我的#do_things_with_message
怎么办好,测试#do_things_with_message?:)
(http://www.ruby-forum.com/topic/197346#859664)
将私有方法重构为一个新对象本质上就像我将它们设为公共(以及使用一种方法的类 - 这是毫无意义的)
编辑:
这更多是关于干净代码和正确测试的理论问题。
在我的第一个链接中,人们认为测试私有方法很差。
我不想欺骗#send,但我也没有看到任何可行的重构方法
【问题讨论】:
-
这不是一个真正的问题。您链接到的线程已经为您提供了几种技术来完成您想要的事情,并就如何围绕问题塑造您的设计提供了一些很好的建议。您可以作弊并使用
send或在测试中公开该方法,也可以重构。 -
@dbenhur 我不想作弊,但我也没有看到任何可行的重构方法
-
如果您的代码足够复杂以至于您需要测试私有方法(即,它不仅仅是一个简单的 Model.find 或其他),那么它可能非常复杂,值得提取到无论如何,单独的课程。