<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
      網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

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

      0
      分享至

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



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

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

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

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



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

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



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

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



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



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



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

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

      當(dāng)測試涉及的數(shù)據(jù)記錄較多,邏輯較復(fù)雜時,使用Mock模擬DAO層的測試所提升單元測試的執(zhí)行效率將更加明顯。

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

      總結(jié)一下使用Mock模擬DAO層方法測試的優(yōu)點:

      1、不需要啟動Spring容器

      2、不需要與數(shù)據(jù)庫發(fā)生真實交互,不會導(dǎo)致臟數(shù)據(jù)產(chǎn)生、不會受到數(shù)據(jù)庫真實數(shù)據(jù)的影響、不需要為了單元測試額外添加/修改/刪除數(shù)據(jù)

      3、啟動速度快、執(zhí)行速度快、開發(fā)簡單且效率高

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


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

      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.

      相關(guān)推薦
      熱點推薦
      0-5!周躍龍完敗希金斯,斯諾克3席4強誕生,小司機搶139萬紅包?

      0-5!周躍龍完敗希金斯,斯諾克3席4強誕生,小司機搶139萬紅包?

      劉姚堯的文字城堡
      2026-02-28 06:14:45
      德黑蘭又傳出兩聲巨大爆炸聲

      德黑蘭又傳出兩聲巨大爆炸聲

      環(huán)球網(wǎng)資訊
      2026-02-28 16:36:21
      被美以轟炸后,伊朗民眾為何不慌?甚至在跳舞歡呼慶祝

      被美以轟炸后,伊朗民眾為何不慌?甚至在跳舞歡呼慶祝

      老馬拉車莫少裝
      2026-02-28 22:43:52
      懸念不大!本賽季具備奪冠資格球隊,滿打滿算有4支,4大豪門出局

      懸念不大!本賽季具備奪冠資格球隊,滿打滿算有4支,4大豪門出局

      毒舌NBA
      2026-02-28 16:46:39
      老板娘說她大腿粗,我該怎么回答?

      老板娘說她大腿粗,我該怎么回答?

      太急張三瘋
      2026-02-28 13:45:03
      男單四強定3席!林昀儒延續(xù)德國老將克星,歷史對決10戰(zhàn)全勝

      男單四強定3席!林昀儒延續(xù)德國老將克星,歷史對決10戰(zhàn)全勝

      燒體壇
      2026-02-28 19:53:14
      用戶反饋谷歌Chrome瀏覽器悄然在C盤下載約4GB本地AI模型文件

      用戶反饋谷歌Chrome瀏覽器悄然在C盤下載約4GB本地AI模型文件

      IT之家
      2026-02-28 08:33:21
      2023年,985女碩士王懿在東京活活餓死,父母拒絕為其收尸

      2023年,985女碩士王懿在東京活活餓死,父母拒絕為其收尸

      談史論天地
      2026-02-18 17:45:40
      江西女子用公驢器官泡酒,三個月后給丈夫喝,不料發(fā)生意外

      江西女子用公驢器官泡酒,三個月后給丈夫喝,不料發(fā)生意外

      古怪奇談錄
      2025-06-28 13:49:02
      江蘇一男子野外意外發(fā)現(xiàn)“比薩斜樓”,進去后瞬間感到眩暈,直呼“根本站不穩(wěn)”,網(wǎng)友表示:可能是給消防員訓(xùn)練使用的

      江蘇一男子野外意外發(fā)現(xiàn)“比薩斜樓”,進去后瞬間感到眩暈,直呼“根本站不穩(wěn)”,網(wǎng)友表示:可能是給消防員訓(xùn)練使用的

      瀟湘晨報
      2026-02-28 12:34:41
      統(tǒng)一信號出現(xiàn)!臺海巡署罕見向大陸表態(tài),金門將成首個回歸試點地

      統(tǒng)一信號出現(xiàn)!臺海巡署罕見向大陸表態(tài),金門將成首個回歸試點地

      劉拕?wù)f體壇
      2026-02-28 16:48:14
      突發(fā)!以媒曝伊朗核計劃核心人物遇襲身亡,中東局勢徹底引爆

      突發(fā)!以媒曝伊朗核計劃核心人物遇襲身亡,中東局勢徹底引爆

      老馬拉車莫少裝
      2026-02-28 19:33:59
      開戰(zhàn)在即伊朗迎來強援,2500枚導(dǎo)彈在路上,美軍更不敢輕易打!

      開戰(zhàn)在即伊朗迎來強援,2500枚導(dǎo)彈在路上,美軍更不敢輕易打!

      青煙小先生
      2026-02-28 09:59:23
      一汽奧迪Q6L e-tron:德國精工打底+華為智慧加持,就是這么能打

      一汽奧迪Q6L e-tron:德國精工打底+華為智慧加持,就是這么能打

      車界江湖car
      2025-07-27 13:40:49
      火箭記者發(fā)問:場均26+5+4率隊前五的杜蘭特,不配進入MVP討論?

      火箭記者發(fā)問:場均26+5+4率隊前五的杜蘭特,不配進入MVP討論?

      愛體育
      2026-03-01 00:06:41
      小米上架米家燃?xì)庠?猛火版,到手價899元

      小米上架米家燃?xì)庠?猛火版,到手價899元

      ZAEKE知客
      2026-02-27 12:41:13
      謝賢擔(dān)心事終發(fā)生,張柏芝給口無遮攔CoCo上了一課

      謝賢擔(dān)心事終發(fā)生,張柏芝給口無遮攔CoCo上了一課

      老好人的憤怒
      2026-02-28 10:26:39
      美大兵壓境,中方關(guān)鍵時刻出手,送伊朗殺手锏,為戰(zhàn)爭按下暫停鍵

      美大兵壓境,中方關(guān)鍵時刻出手,送伊朗殺手锏,為戰(zhàn)爭按下暫停鍵

      東極妙嚴(yán)
      2026-02-25 16:41:46
      火箭隊利空出盡,4大理由坐穩(wěn)前三!37歲杜蘭特熬出頭烏度卡開竅

      火箭隊利空出盡,4大理由坐穩(wěn)前三!37歲杜蘭特熬出頭烏度卡開竅

      鍋子籃球
      2026-02-28 19:34:23
      賭中國不會還手?巴拿馬總統(tǒng)被秒打臉,中方第五波反制馬上就到

      賭中國不會還手?巴拿馬總統(tǒng)被秒打臉,中方第五波反制馬上就到

      石江月
      2026-02-28 17:09:34
      2026-03-01 01:03:00
      51Testing軟件測試網(wǎng) incentive-icons
      51Testing軟件測試網(wǎng)
      中國軟件測試人的精神家園
      1528文章數(shù) 13252關(guān)注度
      往期回顧 全部

      科技要聞

      狂攬1100億美元!OpenAI再創(chuàng)融資神話

      頭條要聞

      媒體:美以的真實目標(biāo)已經(jīng)擺上臺面 不達(dá)目的不罷休

      頭條要聞

      媒體:美以的真實目標(biāo)已經(jīng)擺上臺面 不達(dá)目的不罷休

      體育要聞

      球隊主力全報銷?頂風(fēng)擺爛演都不演了

      娛樂要聞

      周杰倫兒子正面照曝光,與父親好像

      財經(jīng)要聞

      沖突爆發(fā) 市場變天?

      汽車要聞

      嵐圖泰山黑武士版3月上市 搭載華為四激光智駕方案

      態(tài)度原創(chuàng)

      房產(chǎn)
      游戲
      健康
      親子
      軍事航空

      房產(chǎn)要聞

      濱江九小也來了!集齊海僑北+哈羅、寰島...江東教育要炸了!

      所有人保持嘴角不變!生化危機:安魂曲里昂騷話大盤點

      轉(zhuǎn)頭就暈的耳石癥,能開車上班嗎?

      親子要聞

      嬰兒吃的“洋”輔食,九成靠代工貼牌?涉及上市公司

      軍事要聞

      美國以色列聯(lián)合襲擊伊朗 實時戰(zhàn)況

      無障礙瀏覽 進入關(guān)懷版