mockito——讓你輕松地進行單元測試的強大工具

      網友投稿 1359 2025-04-07

      相信每一個程序猿在寫Unit Test的時候都會碰到一些令人頭疼的問題:如何測試一個rest接口;如何測試一個包含客戶端調用服務端的復雜方法;如何測試一個包含從數據庫讀取數據的復雜方法。。。這些問題mockito都可以幫我們輕松地解決。


      Mockito是啥?

      Mockito 是一個強大的用于 Java 開發的模擬測試框架, 通過 Mockito 我們可以創建和配置 Mock 對象, 進而簡化有外部依賴的類的測試。簡單來說,創建mock對象之后,這個對象里面的方法是怎么實現的可以不用去關心,我們只需要給這個方法定義一個輸入、輸出即可。

      什么情況下使用Mockito:

      假設現在要測試method A, method A里面又依賴Method B、Method C、Method D,而依賴的這3個method又不好去構建(如ObsClient需要真實AK SK,HttpClient需要構建客戶端與服務器,Database相對好構建,但是假設Method C只是從table1、table2聯合查詢,你還得分別往table1、table2 insert數據,很繁瑣),這時候可以考慮Mockito進行優雅測試,當然如果你想去構建真實的測試場景,未免有點舍本逐末了~~~

      mockito——讓你輕松地進行單元測試的強大工具

      Mockito的使用:

      引進依賴

      Maven依賴如下:

      org.mockito

      mockito-core

      1.10.19

      test

      代碼中:import org.mockito.Mockito

      創建Mock對象

      這里需要注意的是scala中只能對伴生對象或者Class創建mock對象,不能直接對Object創建mock對象。Scala中使用Mockito.mock(classOf[…])來創建mock對象

      class VpcClient { def getRouteTable(projectId: String, token: String, url: String): Seq[RouteTable] = { val header = Map(RequestAttributes.X_AUTH_TOKEN -> token, "Content-Type" -> MediaType.APPLICATION_JSON) val response = restClient.get(url, header) } }

      object VpcClient { private lazy val _instance: VpcClient = new VpcClient(conf) private var mockClient: VpcClient = _ def getInstance(): VpcClient = { // Keep original logic for other ut, which didn't set mock client. if (RuntimeEnvironment.isTesting && null != mockClient) { return mockClient } _instance } // only used for UT def setMockClient(vpcClient: VpcClient): Unit = { mockClient = vpcClient } }

      舉個例子,現在對VpcClient進行mock,從而可以調用VpcClient里面的getRouteTableList方法。

      class UtilSuite { val vpcClient = Mockito.mock(classOf[VpcClient]) VpcClient.setMockClient(vpcClient) }

      配置Mock對象

      Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token,url)

      當我們有了一個 Mock 對象后, 我們可以調用對象的方法,并且使用Mockito.doReturn().when().method,來設置當調用method時,在某輸入下返回某輸出。這里的輸入是要與 method真實的入參一致的,輸出也是要與method真實的返回參數一致。

      class UtilSuite { val vpcClient = Mockito.mock(classOf[VpcClient]) VpcClient.setMockClient(vpcClient) val projectId = "projectId" val token = "token" val url= "url" val routeTableInfo = new RouteTableInfo Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token, url) }

      總結:

      上面講了Mockito的使用場景,以及scala中怎么使用Mockito創建mock對象。與java中使用Mockito有些許的差別,這些如果感興趣的話都可以參考下官方文檔:

      官網:http://mockito.org

      API文檔:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html

      項目源碼:https://github.com/mockito/mockito

      EI企業智能 大數據 數據湖探索 DLI 智能數據

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel 使用文本函數及操作符&連接兩個或多個文本字符串(excel表格數字怎么變成正常數字)
      下一篇:生產管理條碼系統(產品編碼管理系統)
      相關文章
      免费在线观看亚洲| 亚洲永久中文字幕在线| 亚洲色婷婷综合开心网| 亚洲精品国产suv一区88| 亚洲乱码一二三四五六区| 亚洲国产精品人久久| 国产V亚洲V天堂无码| 在线播放亚洲第一字幕| JLZZJLZZ亚洲乱熟无码| 亚洲综合亚洲综合网成人| 久久亚洲精品高潮综合色a片| 亚洲精品V天堂中文字幕| 亚洲精品无码专区在线| 亚洲成AV人片高潮喷水| 国产精品久久久久久亚洲影视 | 国产亚洲情侣一区二区无码AV | 亚洲国产中文v高清在线观看| 亚洲XX00视频| 国产精品亚洲αv天堂无码| 国产亚洲色婷婷久久99精品91| 久久亚洲精品无码观看不卡| 国产亚洲视频在线播放| 国产亚洲一区二区精品| 亚洲AV无码一区二区二三区软件 | 亚洲Av综合色区无码专区桃色 | 亚洲AV无码一区二区三区性色| 国产精品无码亚洲一区二区三区| 亚洲AV成人精品日韩一区18p| 亚洲日本中文字幕天堂网| 亚洲日韩人妻第一页| 亚洲色欲久久久综合网| 亚洲av福利无码无一区二区| 亚洲综合激情另类小说区| 亚洲中文无码a∨在线观看| 亚洲色欲色欱wwW在线| 午夜亚洲国产成人不卡在线| 亚洲综合色婷婷七月丁香| 亚洲AV成人片色在线观看高潮| 亚洲成人网在线播放| 亚洲日韩AV一区二区三区四区| 四虎亚洲国产成人久久精品|