Junit mockito解耦合測(cè)試

Mock測(cè)試是單元測(cè)試的重要方法之一。

1、相關(guān)網(wǎng)址

官網(wǎng):http://mockito.org/

項(xiàng)目源碼:https://github.com/mockito/mockito

api:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html

2、什么是Mock測(cè)試

Mock 測(cè)試就是在測(cè)試過(guò)程中,對(duì)于某些不容易構(gòu)造(如 HttpServletRequest 必須在Servlet 容器中才能構(gòu)造出來(lái))或者不容易獲取比較復(fù)雜的對(duì)象(如 JDBC 中的ResultSet 對(duì)象),用一個(gè)虛擬的對(duì)象(Mock 對(duì)象)來(lái)創(chuàng)建以便測(cè)試的測(cè)試方法。

Mock 最大的功能是幫你把單元測(cè)試的耦合分解開(kāi),如果你的代碼對(duì)另一個(gè)類或者接口有依賴,它能夠幫你模擬這些依賴,并幫你驗(yàn)證所調(diào)用的依賴的行為。

當(dāng)我們需要測(cè)試A類的時(shí)候,如果沒(méi)有 Mock,則我們需要把整個(gè)依賴樹(shù)都構(gòu)建出來(lái),而使用 Mock 的話就可以將結(jié)構(gòu)分解開(kāi),像下面這樣:

只需提供mock B 和mock C 的返回即可的,不需要知道其底層具體是怎么實(shí)現(xiàn)的。

3、mock使用的場(chǎng)景和好處

  • 真實(shí)的對(duì)象具有不確定的行為,產(chǎn)生不可預(yù)測(cè)效果。(如:股票行情,天氣預(yù)報(bào)),我們經(jīng)常會(huì)遇到測(cè)試的時(shí)候需要去數(shù)據(jù)庫(kù)中查詢某些數(shù)據(jù),但是未知的,就算是知道的,假如有一天數(shù)據(jù)被刪除了或者被修改了,很難進(jìn)行回歸測(cè)試。
  • 真實(shí)對(duì)象很難被創(chuàng)建的,真實(shí)對(duì)象的某些行為很難被觸發(fā)。
  • 真實(shí)對(duì)象實(shí)際上還不存在的。如:某個(gè)接口依賴其他系統(tǒng)的服務(wù)或者該接口還沒(méi)開(kāi)發(fā)出來(lái)。我們就可以使用mock假設(shè)其返回的數(shù)據(jù)進(jìn)行測(cè)試。而不用等待其開(kāi)發(fā)完接口,我們?cè)龠M(jìn)行測(cè)試。提高開(kāi)發(fā)的效率

4、一些特點(diǎn)

  • 可以 mock 具體類而不單止是接口
  • 一點(diǎn)注解語(yǔ)法糖 - @Mock
  • 干凈的驗(yàn)證錯(cuò)誤是 - 點(diǎn)擊堆棧跟蹤,看看在測(cè)試中的失敗驗(yàn)證;點(diǎn)擊異常的原因來(lái)導(dǎo)航到代碼中的實(shí)際互動(dòng)。堆棧跟蹤總是干干凈凈。
  • 允許靈活有序的驗(yàn)證(例如:你任意有序 verify ,而不是每一個(gè)單獨(dú)的交互)
  • 支持“詳細(xì)的用戶號(hào)碼的時(shí)間”以及“至少一 次”驗(yàn)證 <

    網(wǎng)友評(píng)論