<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      在Java微服務項目中,如何使用Mock來進行單元測試?

      0
      分享至

      摘要:在系統開發的過程中,單元測試是其中的一個重要環節。在Java微服務項目中,Spring框架本身就為我們提供了一套單元測試的框架SpringBootTest。如果我們在學校完成課堂作業或出于興趣愛好自學,是可以使用Spring自帶的單元測試框架進行單測的。



      工作中,這種通過SpringBootTest進行單元測試的方式則不推薦使用。其缺點在于,每次執行測試方法都必須啟動Spring容器。當項目規模較大、配置較為復雜時,即使只對一個方法進行測試,也需要消耗大量時間啟動Spring容器。當我們期望對DAO層方法進行測試時,該方法還有其他缺點:① 如果忘記加進行事務控制的注解,將可能導致數據庫產生“臟數據”或數據缺失。② 當查詢語句涉及大量連表查詢時,查詢效率可能十分低下,執行速度緩慢。③ 由于必須根據數據庫中已有的數據來編寫測試條件,每次必須先去數據庫確保哪些數據存在、哪些數據不存在,再編寫對應返回正確值、返回錯誤值的單元測試,開發效率低下。

      針對上述問題,可能有人會想到使用H2內存數據庫的方式加以解決。不過,這依然無法有效地解決執行單元測試需要啟動Spring容器的問題和上述問題③,假設我們期望執行用戶查詢返回一條姓名為xxx、年齡為xxx的記錄,我們依然需要去sql文件中編寫這一條記錄的插入語句,并且也需要大量的配置。如果有很多條需要模擬的數據記錄,就需要創建很多表、編寫很多sql語句,開發效率依然大打折扣。

      此時,有一種很好的解決方案,既不需要和真實的數據庫交互,也不需要啟動Spring容器,同時又不需要編寫大量的測試數據源,它就是Mock。使用Mock進行單元測試,我們可以直接模擬出結果,而不需要準備數據源。本文以簡單的用戶功能為例,說明如何使用Mock來進行DAO層的單元測試。

      1、使用Spring原生的方法進行測試。我們假設ID=1的用戶記錄是存在的,那么查詢結果必定不為NULL。假設ID=2的用戶記錄是不存在的,那么查詢結果必定為NULL。該方式需要啟動Spring容器,并與數據庫發生真實交互。



      2、使用Mock進行測試。該方式不需要啟動Spring容器,也不與數據庫發生真實交互。

      2.1、首先,引入Mock所需的pom依賴



      2.2、使用運行Mock框架的注解@RunWith(MockitoJUnitRunner.class)

      替換Spring原生單元測試的注解@SpringBootTest



      2.3、給Service層對象加上@InjectMocks注解,給Dao層對象加上@Mock注解。其中,@InjectMocks注解對象的方法會進行真實調用(會真實調用已編寫的代碼并返回執行結果),而@Mock注解對象的方法則是進行模擬調用(不會真實調用已編寫的代碼并返回我們設置的預期執行結果)。



      2.4、具體的單元測試方法中,通過Mockito.when(模擬方法).thenReturn(預期返回值)的方式,進行單元測試。



      上述方法中,“Mockito.when(userDAO.findUserById(1L)).thenReturn(new User())”的含義是,當userDAO調用findUserById進行查詢且參數為1L時,會返回一個new的User對象。

      同理,“Mockito.when(userDAO.findUserById(2L)).thenReturn(null)”的含義是,當userDAO調用findUserById進行查詢且參數為2L時,會返回一個空對象。

      當測試涉及的數據記錄較多,邏輯較復雜時,使用Mock模擬DAO層的測試所提升單元測試的執行效率將更加明顯。

      此外,當我們本地在開發調試時,如果數據庫的測試數據發生了改變,那么我們單元測試的結果也會受到影響。例如,數據庫中原本存在ID=1的記錄,如果不小心刪掉了,那么我們單測中Assert.assertNotNull的方法就會報錯。而如果使用Mock的形式,無論數據庫中是否存在該記錄,我們執行DAO層方法的返回值都只依賴于我們在thenReturn方法中設置的值。

      總結一下使用Mock模擬DAO層方法測試的優點:

      1、不需要啟動Spring容器

      2、不需要與數據庫發生真實交互,不會導致臟數據產生、不會受到數據庫真實數據的影響、不需要為了單元測試額外添加/修改/刪除數據

      3、啟動速度快、執行速度快、開發簡單且效率高

      最后:在我的V:atstudy-js,可以費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!其中包括了有基礎知識、Linux必備、Shell、互聯網程序原理、Mysql數據庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試、安全測試等。


      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      潘江帶隊終于打出點東西了!末節拒用人一根筋,新三巨碾壓新疆!

      潘江帶隊終于打出點東西了!末節拒用人一根筋,新三巨碾壓新疆!

      籃球資訊達人
      2026-04-05 00:40:29
      24小時內,美軍為營救飛行員,又損失4架戰機

      24小時內,美軍為營救飛行員,又損失4架戰機

      兵國大事
      2026-04-04 19:47:00
      62年印軍戰斗力如何?陰法唐回憶:很多戰斗,印軍戰死比被俘的多

      62年印軍戰斗力如何?陰法唐回憶:很多戰斗,印軍戰死比被俘的多

      云霄紀史觀
      2026-03-29 16:54:22
      杜鋒:薩林杰拉傷影響排兵布陣 崔永熙頂四號位贏下來非常不容易

      杜鋒:薩林杰拉傷影響排兵布陣 崔永熙頂四號位贏下來非常不容易

      狼叔評論
      2026-04-04 23:10:37
      5萬美軍突踩剎車!內塔尼亞胡陷死局,狂咬中俄朝,死綁美國戰車

      5萬美軍突踩剎車!內塔尼亞胡陷死局,狂咬中俄朝,死綁美國戰車

      小蔑談事
      2026-04-04 21:13:42
      歐洲媒體沉默了,500美軍在迪拜被一鍋端,傷亡竟只有13人?

      歐洲媒體沉默了,500美軍在迪拜被一鍋端,傷亡竟只有13人?

      趙枹是個熱血青年
      2026-04-03 21:16:56
      財神爺講述:做生意人理發最好的日子,每月這3天,剪一次旺一月

      財神爺講述:做生意人理發最好的日子,每月這3天,剪一次旺一月

      古怪奇談錄
      2026-03-24 10:23:03
      網購13.8元藍莓苗后選擇“僅退款”,兩天后女子收到“萬古流芳”殯葬用品

      網購13.8元藍莓苗后選擇“僅退款”,兩天后女子收到“萬古流芳”殯葬用品

      黃河新聞網呂梁
      2026-04-03 09:25:55
      1999 鶴壁特大奸殺案:房四平一腳跺殺人,囂張語錄震碎三觀

      1999 鶴壁特大奸殺案:房四平一腳跺殺人,囂張語錄震碎三觀

      咪咖事界
      2026-04-03 14:22:33
      于東來兒媳首次正面露面,顏值封神,和婆婆馬麗撞臉像復制粘貼

      于東來兒媳首次正面露面,顏值封神,和婆婆馬麗撞臉像復制粘貼

      往史過眼云煙
      2026-03-23 19:27:43
      以軍稱空襲德黑蘭多處關鍵基礎設施

      以軍稱空襲德黑蘭多處關鍵基礎設施

      界面新聞
      2026-04-04 14:34:26
      伊朗有救了?車臣開出參戰條件,局勢變成3對1,以色列遭南北夾擊

      伊朗有救了?車臣開出參戰條件,局勢變成3對1,以色列遭南北夾擊

      董董歷史燴
      2026-04-03 20:56:59
      金昊月薪1300元,瑤瑤媽媽是鄉長,并沒高攀他家,記者最新采訪

      金昊月薪1300元,瑤瑤媽媽是鄉長,并沒高攀他家,記者最新采訪

      漢史趣聞
      2026-04-04 17:17:30
      登貝萊:第一個進球?這種球如果讓我射十次,可能也就進一次

      登貝萊:第一個進球?這種球如果讓我射十次,可能也就進一次

      懂球帝
      2026-04-04 06:03:10
      美容院老板娘大實話:脫了衣服,女人的差距根本不在臉上!

      美容院老板娘大實話:脫了衣服,女人的差距根本不在臉上!

      夜深愛雜談
      2026-03-08 21:28:24
      漫步者把唱片機塞進了音箱,只賣269元

      漫步者把唱片機塞進了音箱,只賣269元

      灰度測試中
      2026-04-03 19:25:03
      美媒:美軍兩架搜救直升機被擊中 無人受傷

      美媒:美軍兩架搜救直升機被擊中 無人受傷

      新華社
      2026-04-04 04:12:04
      51歲周迅變樣:滿頭白發臉松垮,癟嘴像老奶奶,無兒無女成遺憾

      51歲周迅變樣:滿頭白發臉松垮,癟嘴像老奶奶,無兒無女成遺憾

      悅君兮君不知
      2026-03-20 12:19:00
      逼走陳忠和,打壓劉國梁,排擠郎平,90歲“體壇惡人”如今怎樣了

      逼走陳忠和,打壓劉國梁,排擠郎平,90歲“體壇惡人”如今怎樣了

      拳擊時空
      2026-04-03 05:53:14
      張雪評哪吒汽車“5億Logo”:張雪機車Logo是白送的

      張雪評哪吒汽車“5億Logo”:張雪機車Logo是白送的

      三言科技
      2026-04-04 17:35:26
      2026-04-05 01:12:49
      51Testing軟件測試網 incentive-icons
      51Testing軟件測試網
      中國軟件測試人的精神家園
      1549文章數 13258關注度
      往期回顧 全部

      科技要聞

      內存一年漲四倍!國產手機廠商集體漲價

      頭條要聞

      特朗普發文:距離一切災難降臨在伊朗頭上僅剩48小時

      頭條要聞

      特朗普發文:距離一切災難降臨在伊朗頭上僅剩48小時

      體育要聞

      剎不住的泰格·伍茲,口袋里的兩粒藥丸

      娛樂要聞

      Q女士反擊,否認逼宋寧峰張婉婷離婚

      財經要聞

      中微董事長,給半導體潑點冷水

      汽車要聞

      17萬級海豹07EV 不僅續航長還有9分鐘滿電的快樂

      態度原創

      健康
      房產
      親子
      時尚
      家居

      干細胞抗衰4大誤區,90%的人都中招

      房產要聞

      小陽春全面啟動!現房,才是這波行情里最穩的上車票

      親子要聞

      孕婦買200元水果被丈夫罵后續:雙標到極致,家境曝光,網友勸離

      別再穿大一碼了!遮肉根本不是靠寬松

      家居要聞

      溫馨多元 愛的具象化

      無障礙瀏覽 進入關懷版