Mock工具介紹

https://cloud.tencent.com/developer/article/1684199?from=article.detail.1465591

什麼是Mock

如果將mock單獨翻譯過來,其意義爲 “虛假、虛設”,因此在軟件開發領域,我們也可以將其理解成 “虛假數據”,或者 “真實數據的替身”

爲什麼使用Mock

1.解除依賴,團隊並行工作

接口尚未開發完成,在系統交互雙方定義好接口之後,我們可以提前進行開發和測試,並不依賴上游系統的開發實現。

2.開啓TDD模式,即測試驅動開發

單元測試是TDD的基石,當接口定義好後,測試人員就可以創建一個Mock,把接口添加到自動化測試環境中,提前創建測試。

3.隔離系統

通過編寫Mock,隔離請求操作(Get、Post)對於數據庫中數據的污染。

4.提升測試覆蓋度

通過Mock接口返回的不同狀態,來查看系統是否能夠正常影響,提升測試的覆蓋度。

5.方便演示

通過使用Mock模擬數據接口,我們即可在只開發了UI的情況下,無須服務端的開發就可以進行產品的演示。

除此之外,Mock可以加深我們對測試的理解,深入明白測試“輸入”和“輸出”的不同表達形式,同時還能提高自身技術,脫離功能測試對於開發的依賴。

市面上常見的Mock工具

市面上常見的Mock分爲單元測試級別的Mock工具和接口測試級別的Mock工具

單元測試級別的mock工具

單元測試級別的Mock工具有Easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等。

EasyMock

EasyMock 是一套用於通過簡單的方法對於給定的接口生成 Mock 對象的類庫。它提供對接口的模擬,能夠通過錄制、回放、檢查三步來完成大體的測試過程,可以驗證方法的調用種類、次數、順序,可以令 Mock 對象返回指定的值或拋出指定異常。通過 EasyMock,我們可以方便的構造 Mock 對象從而使單元測試順利進行。

JMock

JMock是一個使用模擬對象機制測試Java代碼的開發包。模擬對象(Mock Object)可以取代真實對象的位置,用於測試一些與真實對象進行交互或依賴於真實對象的功能,模擬對象的背後目的就是創建一個輕量級的、可控制的對象來代替測試中需要的真實對象,模擬真實對象的行爲和功能,方便我們的測試。JMock就是這種機制的實現,使用JMock我們可以快速創建模擬對象,定義交互過程中的約束條件等,同時JMock也是易擴展的,你可以很方便添加自定義的需求。

Mockito

Mockito 無需準備昂貴的前期啓動。他們的目標是透明的,讓開發人員專注於測試選定的行爲。

Mockito 擁有的非常少的 API,所有開始使用 Mockito,幾乎沒有時間成本。因爲只有一種創造 mock 的方式。只要記住,在執行前 stub,而後在交互中驗證。你很快就會發現這樣 TDD java 代碼是多麼自然。

單元測試Mock工具對比

Features:

Feature

EasyMock

jMock

Mockito

UnitilsMock

PowerMock(EasyMock)

PowerMock(Mockito)

JMockit

Invocation count constraints(調用數限制)

 

Recording strict expectations(記錄嚴格的預期結果)

   

 

Explicit verification(顯式驗證)

   

 

Partial mocking(部分mock)

 

Easier argument matching based on properties of value objects(基於值對象屬性的簡化參數匹配)

 

Cascading mocks(級聯mock)

   

 

Mocking of multiple interfaces(多接口mock)

   

   

Mocking of annotation types(註釋類型mock)

 

 

Partially ordered expectations

 

       

Auto-injection of mocks(mock的自動注入)

   

 

Mocking of enums(枚舉的mock)

       

Declarative mocks for test methods (mock parameters)

           

Mocking of unspecified implementation classes(未實現接口類的mock)

           

“Duck typing” fakes for integration tests

           

Total

4/14

4/14

8/14

6/14

5/14

9/14

14/14

Qualities:

Feature

EasyMock

jMock

Mockito

UnitilsMock

PowerMock(EasyMock)

PowerMock(Mockito)

JMockit

Argument matchers for some parameters only, not all

     

   

No method call to switch from record to replay(切換記錄回放時無方法調用)

   

 

No extra code for implicit verification(隱式驗證沒有額外代碼)

   

N/A

N/A

 

N/A

No extra “prepare for test” code(沒有額外的”prepare for test”代碼)

   

No need to use @RunWith annotation or base test class(不需要用@runwith註解和測試基類)

     

Consistent syntax between void and non-void methods(空和非空方法的語法一致)

 

 

   

Mocking of constructors and final/static/private methods(構造函數、final、static和private方法的mock)

       

Mocking of “new-ed” objects(“new-ed”對象的mock)

       

Support for covariant return types

           

Single jar file in the classpath is sufficient to use mocking API(在classpath中的單個jar文件就能夠使用mockAPI

   

 

N/A

N/A

Total

2/10

3/10

4/9

4/9

2/9

3/8

10/10

接口測試級別的mock工具

接口測試級別的Mock工具有RAP、Yapi、Moco等。

RAP

RAP是阿里團隊出的一款接口管理工具,幫助開發人員有效的管理接口文檔。包括阿里集團在內的三百五十多個企業都在使用RAP管理重要的接口文檔。

  • Web接口管理工具,接口自動化,MOCK數據自動生成,自動化測試
  • 能夠通過分析接口結構自動生成Mock數據、校驗真實接口的正確性
  • 阿里產品,功能完善、結合了文檔、Mock.js、可視化、Rest、接口過渡、文檔修改提醒、支持本地部署

Yapi

YApi是去哪兒網移動架構組開發的一個開源項目,YApi的 Mock 功能可以根據用戶的輸入接口信息如協議、URL、接口名、請求頭、請求參數、返回數據、生成 Mock 接口,這些接口會自動生成模擬數據,創建者可以自由構造需要的數據。mock模擬數據基於mock.js。

Mock.js 是一款模擬數據生成器,旨在幫助前端獨立於後端進行開發,幫助編寫單元測試。提供了以下模擬功能:

  • 根據數據模板生成模擬數據
  • 模擬 Ajax 請求,生成並返回模擬數據
  • 基於 HTML 模板生成模擬數據

Moco

Moco 是一個簡單搭建 stub 的框架,主要用於測試和集成。

Moco本身支持API和獨立運行兩種方式。通過使用API,開發人員可以在JUnit、JBehave等測試測試框架裏使用Moco,極大程度地降低了集成點測試的複雜度

Moco可以提供以下服務:

  • HTTP APIs
  • Socket APIs
  • REST API

接口測試Mock工具對比

 

Yapi

Rap

Moco

方便集成

×

Mock簡便性

文檔管理

×

×

開源程度

部署難度

可視化界面

×

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章