我有一个消息类,可以通过将参数传递给构造函数来初始化,或者通过不传递参数然后使用访问器设置属性来初始化。在属性的setter方法中进行了一些预处理。
我有测试可以确保setter方法做到他们应该做的事情,但我似乎无法找到一种测试初始化方法实际调用setter的好方法。
class Message
attr_accessor :body
attr_accessor :recipients
attr_accessor :options
def initialize(message=nil, recipients=nil, options=nil)
self.body = message if message
self.recipients = recipients if recipients
self.options = options if options
end
def body=(body)
@body = body.strip_html
end
def recipients=(recipients)
@recipients = []
[*recipients].each do |recipient|
self.add_recipient(recipient)
end
end
end
答案 0 :(得分:4)
我倾向于测试初始化程序的行为,
即。它设置了你期望的变量。
不了解你如何做到这一点,假设底层访问器工作,或者你可以设置实例变量,如果你想。它几乎是一个很好的老式单元测试。
e.g。
describe "initialize" do
let(:body) { "some text" }
let(:people) { ["Mr Bob","Mr Man"] }
let(:my_options) { { :opts => "are here" } }
subject { Message.new body, people, my_options }
its(:message) { should == body }
its(:recipients) { should == people }
its(:options) { should == my_options }
end