同志们,如何用嵌套的私有方法“self.merge_op”测试方法“self.default”?我m noob in RSpec. What is more suitable for such case: mocking/stubbing?
Functionality of file - it
是某种MailClient
class MailClient
def self.default
options = self.merge_op
@clients[options] = MailClient.send :new unless @clients.has_key?(options)
@clients[options]
end
def self.merge_op(opts={:smtp => {}, :pop3 => {}})
def_smtp_opts = {:address => settings.mail_smtp_server,
:port => settings.mail_smtp_port,
:domain => settings.mail_smtp_domain,
:user_name => settings.mail_smtp_user_name,
:password => settings.mail_smtp_user_pass,
:authentication => 'plain',
:enable_starttls_auto => true}
end
答案 0 :(得分:1)
我只是测试default
方法,而不考虑它使用私有方法来完成它的工作。弄清楚给定输入的预期输出是什么。
我说这个的主要原因是它使你的测试更加健壮。您可以更改default
方法的内部工作方式,甚至可以取消私有方法,而无需更改测试。
我唯一想到的模拟是settings
对象在私有merge_op
方法中的任何内容。该对象实际上是default
方法的输入。