実行しているテストによって異なります。単一のクラスのみをテストする単体テストでは、スタブが役立ちます。
例として、他のオブジェクトが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