Junit mockito解耦合測試
Mock測試是單元測試的重要方法之一。
1、相關(guān)網(wǎng)址
官網(wǎng):http://mockito.org/
項目源碼:https://github.com/mockito/mockito
api:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html
2、什么是Mock測試
Mock 測試就是在測試過程中,對于某些不容易構(gòu)造(如 HttpServletRequest 必須在Servlet 容器中才能構(gòu)造出來)或者不容易獲取比較復(fù)雜的對象(如 JDBC 中的ResultSet 對象),用一個虛擬的對象(Mock 對象)來創(chuàng)建以便測試的測試方法。
Mock 最大的功能是幫你把單元測試的耦合分解開,如果你的代碼對另一個類或者接口有依賴,它能夠幫你模擬這些依賴,并幫你驗證所調(diào)用的依賴的行為。
當(dāng)我們需要測試A類的時候,如果沒有 Mock,則我們需要把整個依賴樹都構(gòu)建出來,而使用 Mock 的話就可以將結(jié)構(gòu)分解開,像下面這樣:
只需提供mock B 和mock C 的返回即可的,不需要知道其底層具體是怎么實現(xiàn)的。
3、mock使用的場景和好處
- 真實的對象具有不確定的行為,產(chǎn)生不可預(yù)測效果。(如:股票行情,天氣預(yù)報),我們經(jīng)常會遇到測試的時候需要去數(shù)據(jù)庫中查詢某些數(shù)據(jù),但是未知的,就算是知道的,假如有一天數(shù)據(jù)被刪除了或者被修改了,很難進(jìn)行回歸測試。
- 真實對象很難被創(chuàng)建的,真實對象的某些行為很難被觸發(fā)。
- 真實對象實際上還不存在的。如:某個接口依賴其他系統(tǒng)的服務(wù)或者該接口還沒開發(fā)出來。我們就可以使用mock假設(shè)其返回的數(shù)據(jù)進(jìn)行測試。而不用等待其開發(fā)完接口,我們再進(jìn)行測試。提高開發(fā)的效率
4、一些特點
- 可以 mock 具體類而不單止是接口
- 一點注解語法糖 - @Mock
- 干凈的驗證錯誤是 - 點擊堆棧跟蹤,看看在測試中的失敗驗證;點擊異常的原因來導(dǎo)航到代碼中的實際互動。堆棧跟蹤總是干干凈凈。
- 允許靈活有序的驗證(例如:你任意有序 verify ,而不是每一個單獨的交互)
- 支持“詳細(xì)的用戶號碼的時間”以及“至少一 次”驗證 <