比方说,你有一个简单的类,如:测试突变和存取方法时避免重复
class Box
def initialize
@widgets = []
end
def add_widget(widget)
@widgets << widget
end
def widgets
@widgets
end
end
我会写一个测试,看起来是这样的:
describe Box do
describe "#initialize" do
it "creates an empty box"
Box.new.widgets.should == []
end
end
describe "#add_widget" do
it "adds a widget to the box"
widget = stub('widget')
box = Box.new
box.add_widget(widget)
box.widgets.should == [widget]
end
end
describe "#widgets" do
it "returns the list of widgets"
widget = stub('widget')
box = Box.new
box.add_widget(widget)
box.widgets.should == [widget]
end
end
end
注意如何最后两个测试最终是相同的。我正在努力避免这些重叠的情况。我在前两种情况下隐式测试#widgets,但我觉得应该有一个明确的测试。但是,代码与第二种情况相同。
如果一个类有3个公共方法,那么我会期望至少有一个测试对应每个这些方法。我错了吗?
UPDATE
我通过罗恩杰弗里斯其建议不要测试简单的存取发现this article。
非常感谢,但尽管更短,#add_widget和#widgets测试用例仍然相同。 – 2012-08-16 14:08:51
@AndyWaite:我看到你现在得到了什么,我会更新我的答案 – 2012-08-16 14:10:06
看来你的修订版本只包含2个测试,现在第二个测试结合了#add_widget和#widgets测试。我认为这是一个完全合理的方法,但能够得到一些其他观点会很好。 – 2012-08-16 15:17:11