stub
既然你应该测试真正的课程,你为什么要使用?
我知道在某些情况下您不想测试其他类并且不想通过其他相关的类方法,但我仍然认为使用真正的方法会更好。
只有当您想快速跳过一个方法的其他相关任务并返回最终结果以用于测试时,我才能真正看到好处
还有其他我们应该考虑的好处吗?
(除了上述之外,我还认为这stub
是有风险的,因为您的代码会随着它的发展而变化,并且可能会产生与测试中产生的不同的输出)
这取决于您正在执行的测试。对于只测试单个类的单元测试,存根是有益的。
例如,假设您正在测试一个在其他对象完成did_it!
操作时发送电子邮件的类:
describe Emailer do
context ".send_email" do
it "sends an email if another object 'did_it!'" do
obj = Obj.new
Emailer.send_email(obj).should == true # the email sends successfully
end
end
end
在这种情况下,如果obj.did_it!
是一个超级昂贵的操作,或者它可能会间歇性地失败,那么这个测试可能会有问题。
然而,在这个测试中,我们只关心返回Emailer.send_email
时是否正确运行——我们不关心该方法是否有效,因为这不是我们要测试的。obj.did_it!
true
obj.did_it!
因此,我们使用存根来表示,“假设obj.did_it!
成功,是否Emailer.send_email
真的发送电子邮件?”:
describe Emailer do
context ".send_email" do
it "sends an email if another object 'did_it!'" do
obj = stub(:did_it! => true)
Emailer.send_email(obj).should == true # the email sends successfully
end
end
end