簡體   English   中英

模擬和存根

[英]Mocks and Stubs

我真的不明白Mocks和Stubs是什么。 我想知道我們在測試用例中何時,為何以及如何使用Mocks。 我知道Ruby on Rails中的Mocks和Stubs有很好的框架,但不知道目的,我不願意在我的應用程序中使用它們。

你能澄清一下Mocks和Stubs嗎? 請幫忙。

我非常簡單的答案是:

  • 模擬是具有與其他類似接口的對象
  • 存根是假方法並返回特定答案

我們兩個都試圖實現相同的目標:我們希望單獨測試特定的單元(模型/視圖/控制器/模塊)。 例如,當我們測試控制器時,我們不想測試我們的模型,因此我們使用模擬。 我們希望確保調用正確的方法,例如find 所以在我們的模擬器上,我們有一個存根,它將返回預定義的東西,而不會實際進入數據庫。

因此,我們測試期望:我們期望被調用的方法(在其他單元上),而不實際調用它們。 對該特定方法的測試應該已經在其自己的測試中進行了介紹。

根據Fowler的文章, 模擬不是存根 ,存根是獨立於外部調用的假方法,而模擬是假的對象,具有對調用的預編程反應。

嘲諷的是更具體和相關對象:如果某些參數傳遞,那么對象返回了一定的成果。 對象的行為被模仿或“嘲笑”。

Stubbing更通用且與方法相關:stubbed方法通常返回所有參數的相同結果。 方法的行為被凍結,罐裝或“存根”。

模擬用於基於交互的測試以驗證行為。 使用模擬,您可以斷言被測方法稱為另一種方法。 例如,我可能想確保控制器對象調用存儲庫以獲取一些數據。

存根用於基於狀態的測試以設置特定的應用程序狀態。 與模擬不同,您不必擔心是否進行了通話。 例如,如果您正在測試某些存儲庫代碼,則可能需要設置存根方法以確保存儲庫在數據庫連接關閉時正確處理該情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM