這取決於測試你是執行。對於單元測試,只測試單個類,存根是有益的。
舉個例子,假設當其他一些物體結束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
瓶頸使用存根是磕碰錯誤的東西一樣簡單。它們在幫助避免觸及數據庫方面非常出色,或避免觸及可能不會生成的相關數據。如果你是單元測試,存根通常是一個很好的工具。單元測試應該很簡單,他們不需要測試所有相關的數據或應用這些數據的過程。扼殺正確的事情是人們通常會犯錯的。 –
在嚴重的大型企業應用中的任何變化不大,是非常敏感的,豈不是更好地避免'stub'和而實際上與數據庫的交互藏漢測出來? (帶有測試數據庫和測試數據) –