我對rspec和整個TDD方法很新穎。有人可以解釋模擬和存根之間的區別。我們什麼時候使用它們以及什麼時候使用Factory Girl來在測試用例中創建對象?模擬,存根和工廠女孩有什麼區別?
回答
你可以把一個模擬(或雙)是假的對象。當你正在測試並需要使用一個在你的測試中不易使用的對象時,你可以使用一個模擬來近似你如何期望這個對象的行爲和解決方法。存根可以以類似的方式使用,但可以在對象上使用單獨的方法。
下面是一個使用都不少的虛構的例子:
class Client
def connect_to_server
if Server.connect.status == 'bad'
show_an_error
else
do_something_else
end
end
def do_something_else; end
def show_an_error; end
end
context "failure" do
it "displays an error" do
bad_network_response = double("A bad response from some service", :status => 'bad')
Server.should_receive(:connect).and_return(bad_network_response)
client = Client.new
client.should_receive(:show_an_error)
client.connect_to_server
end
end
你可以想像,使用了很多嘲笑或磕碰的是一個壞主意;這基本上掩蓋了測試中的部分代碼,但對於一些困難/罕見的測試場景來說,這是一個簡單的解決方案。
Factory Girl對於生成測試數據很有用。您可能會使用工廠作爲用於爲您的模型創建實例的配方,您可能需要測試涉及大量測試數據的事情,這可能會導致使用fixtures不起作用並且明確創建複雜對象的情況可能會很乏味。
你的第一站是Martin Fowler的著名的文章:Mocks are not Stubs
編輯
Mocks
和Stubs
兩種類型Test Doubles(Mezaros術語)的。測試雙擊通常用於模擬被測系統(或被測類)所需的依賴關係,以便SUT/CUT可以獨立於其依賴關係進行測試。 (買者 - 精確術語可以是相當通過Jeff here提到一個敏感的問題例如)
維基百科:
- "Test stubs provide canned answers"
- "mock objects can simulate the behavior of complex, real objects"
實例
- 存根方法可能只是返回一個常數值w母雞被SUT叫來,例如用於開展SUT的特定測試案例。
*
像Mockito(Java)和Moq(.Net)這樣的框架允許您用最少的代碼在運行中針對依賴項的接口構建模擬類,並提供驗證SUT是否與模擬正確交互的功能,例如通過檢查SUT用正確的參數調用模擬方法的正確次數。
*免責聲明 - 我不是一個Ruby開發
當你閱讀完這篇文章後,你可以進入[製作TDD的嘲弄](http://avdi.org/devblog/2011/09/06/making-a-mockery-of-tdd/) –
- 1. 工廠女孩vs. User.create - 有什麼區別?
- 2. 工廠女孩 - 有
- 3. 工廠女孩 -
- 4. 工廠女孩 - 目的是什麼?
- 5. 工廠女孩和HAS_ONE
- 6. 工廠女孩沒有存在驗證
- 7. 與工廠女孩
- 8. 與工廠女孩
- 9. 工廠女孩的虛擬數據
- 10. 工廠女孩共同根目錄圖
- 11. 工廠女孩嵌套工廠
- 12. 工廠女孩,從屬工廠
- 13. 工廠女孩回憶工廠
- 14. 工廠女孩叫模特嗎?
- 15. 克隆工廠女孩的模型?
- 16. 仿真和模擬有什麼區別?
- 17. 工廠方法和抽象工廠設計模式有什麼區別?
- 18. 工廠女孩錯誤
- 19. 工廠女孩協會4.0.0
- 20. 工廠女孩參考父
- 21. 如何在工廠女孩
- 22. Rails 4.0的工廠女孩
- 23. 工廠女孩與製造
- 24. 工廠女孩belongs_to的:CLASS_NAME
- 25. 工廠女孩協會
- 26. Rails 3.1,工廠女孩bug
- 27. MiniTest的工廠女孩
- 28. Rspec工廠女孩問題
- 29. 工廠女孩的屬性
- 30. Rails工廠女孩協會
我可能是錯的,但我認爲你在方法上存在錯誤。你可以有存根對象或模擬對象,或者存根方法或模擬方法。不同的是你如何使用它們。存根(stub)只是讓測試工作而不實際調用另一個依賴關係。 Mock也是這樣做的,但調用是必需的,也是測試的一部分。你可能有一個虛假的對象,既有存根也有嘲笑。 Rspec甚至稱它們爲「雙」而不是模擬。 – fregas