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

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

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

只需提供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ù)庫中查詢某些數(shù)據(jù),但是未知的,就算是知道的,假如有一天數(shù)據(jù)被刪除了或者被修改了,很難進(jìn)行回歸測(cè)試。
  • 真實(shí)對(duì)象很難被創(chuàng)建的,真實(shí)對(duì)象的某些行為很難被觸發(fā)。
  • 真實(shí)對(duì)象實(shí)際上還不存在的。如:某個(gè)接口依賴其他系統(tǒng)的服務(wù)或者該接口還沒開發(fā)出來。我們就可以使用mock假設(shè)其返回的數(shù)據(jù)進(jìn)行測(cè)試。而不用等待其開發(fā)完接口,我們?cè)龠M(jìn)行測(cè)試。提高開發(fā)的效率

4、一些特點(diǎn)