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、介面過渡、文件修改提醒、支援本地部署。