1. 程式人生 > >Mock測試工具比較

Mock測試工具比較

Java Mock測試工具比較

最近,在做一個Java Web的專案,專案中需要整合一套Mock測試工具。隨即對市面上的mock測試工具進行了調研,下面是調研結果。其中,mock測試工具分為單元測試級別的mock工具和介面測試級別的mock工具。

1.單元測試級別的mock工具

目前,這個級別的mock工具有easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等等.
關於它們的優劣勢在JMockit官網上給出一個簡單的比較,結果如下圖所示。這個結果可能會偏向JMockit,我們可以作為參考。
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

就目前來講,是mockit+powermock、JMockit這兩種工具使用人數較多。JMockit的功能最為完善,mockit+powermock的使用者體驗相對較好一點。

2.介面測試級別的mock工具

介面級別的mock工具完成的主要功能是對一個使用者的請求,模擬server返回一個介面的響應資料。目前,這類的主流mock工具主要有以下幾種:
(1)Wiremock
github地址: https://github.com/tomakehurst/wiremock
特點:
- 支援Http響應頭,匹配URL,heade和body內容模式
- 請求驗證
- 可以作為一個獨立的程序或者WAR app在單元測試中執行
- 可以通過Java API,Json檔案和JSON over HTTP配置
- 有記錄/回放功能
- Fault injection
- 可以作為請求檢查和替換的瀏覽器代理
- 有狀態的行為模擬
- 可配置響應延遲
(2)Mockserver
github地址:https://github.com/jamesdbloom/mockserver
特點:
- 能夠mock HTTP或者HTTPS 的server或者服務
- 當一個請求匹配 expectation時能夠返回一個mock response
- 當一個請求匹配 expectation時能夠forward 一個請求
- 當一個請求匹配 expectation時能夠執行一個回撥(callback),允許動態地建立response
- 支援Request驗證
(3)Moco
github地址:https://github.com/dreamhead/moco
特點:
- an easy setup stub framework.
- 支援HTTP、HTTPS、SOCKS
- 支援單元測試
(4)Mock.js
github地址:https://github.com/nuysoft/Mock/tree/refactoring
特點:
- 根據資料模板生成整合後的資料
- 對於Ajax請求提供request/response mocking
(5)RAP
github地址:https://github.com/thx/RAP
特點:
- Web介面管理工具,介面自動化,MOCK資料自動生成,自動化測試
- 能夠通過分析介面結構自動生成Mock資料、校驗真實介面的正確性
- 阿里產品,功能完善、結合了文件、Mock.js、視覺化、Rest、介面過渡、文件修改提醒、支援本地部署。