亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

模擬和存根之間有什么區別?

模擬和存根之間有什么區別?

largeQ 2019-08-28 16:13:56
模擬和存根之間有什么區別?我已經閱讀過各種關于模擬和測試中存根的文章,包括Martin Fowler的Mocks Are Not Stubs,但仍然不明白其中的區別。
查看完整描述

3 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

前言

對象有幾種定義,不是真實的。一般術語是測試雙倍。這個術語包括:虛擬,,存根模擬。

參考

根據Martin Fowler的文章

  • 虛擬對象傳遞但從未實際使用過。通常它們僅用于填充參數列表。

  • 對象實際上有工作實現,但通常需要一些使它們不適合生產的快捷方式(內存數據庫就是一個很好的例子)。

  • 存根提供了在測試期間進行的調用的固定答案,通常不會對測試中編程的任何內容做出任何響應。存根還可以記錄有關呼叫的信息,例如記住它'發送'的消息的電子郵件網關存根,或者可能只記錄它'發送'的消息。

  • 模擬是我們在這里所討論的:預編程的對象具有預期,形成了預期接收的調用的規范。

樣式

Mocks vs Stubs =行為測試與狀態測試

原理

根據每次測試只測試一件事的原則,在一次測試中可能有幾個存根,但通常只有一個模擬。

生命周期

使用存根測試生命周期:

  1. 設置 - 準備正在測試的對象及其存根協作者。

  2. 練習 - 測試功能。

  3. 驗證狀態 - 使用斷言檢查對象的狀態。

  4. 拆解 - 清理資源。

使用模擬測試生命周期:

  1. 設置數據 - 準備正在測試的對象。

  2. 設置期望 - 準備主要對象正在使用的模擬期望。

  3. 練習 - 測試功能。

  4. 驗證期望 - 驗證是否已在mock中調用了正確的方法。

  5. 驗證狀態 - 使用斷言檢查對象的狀態。

  6. 拆解 - 清理資源。

摘要

模擬和存根測試都給出了問題的答案:結果是什么?

使用模擬測試也對以下方面感興趣:結果如何實現?


查看完整回答
反對 回復 2019-08-28
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

以下是對每個示例的描述,然后是真實世界的示例。

  • 虛擬 - 只是虛假的價值來滿足API。

    示例:如果您正在測試一個類的方法,該類在構造函數中需要許多強制參數而對測試沒有影響,那么您可以創建虛擬對象以創建類的新實例。

  •  - 創建一個可能依賴于某些外部基礎結構的類的測試實現。(這是很好的做法,你的單元測試也不要實際上外部基礎設施交互。)

    示例:創建用于訪問數據庫的虛假實現,將其替換為in-memory集合。

  • 存根 - 覆蓋返回硬編碼值的方法,也稱為state-based。

    示例:您的測試類取決于Calculate()需要5分鐘才能完成的方法。您可以使用返回硬編碼值的存根替換其實際實現,而不是等待5分鐘; 只占一小部分時間。

  • 模擬 - 非常相似Stubinteraction-based不是基于狀態。這意味著您不希望Mock返回某個值,而是假設方法調用的特定順序。

    示例:您正在測試用戶注冊類。打電話后Save,應該打電話SendConfirmationEmail。

Stubs并且Mocks實際上是子類型Mock,包括交換實際實現和測試實現,但出于不同的,特定的原因。


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 669 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號