<tr id="tp1vn"><td id="tp1vn"><dl id="tp1vn"></dl></td></tr>
  1. <p id="tp1vn"></p>
  2. <sub id="tp1vn"><p id="tp1vn"></p></sub>
    <u id="tp1vn"><rp id="tp1vn"></rp></u>
    <meter id="tp1vn"></meter>
      <wbr id="tp1vn"><sup id="tp1vn"></sup></wbr>
      日韩第一页浮力,欧美a在线,中文字幕无码乱码人妻系列蜜桃 ,国产成人精品三级麻豆,国产男女爽爽爽免费视频,中文字幕国产精品av,两个人日本www免费版,国产v精品成人免费视频71pao
      網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

      在Java微服務(wù)項(xiàng)目中,如何使用Mock來(lái)進(jìn)行單元測(cè)試?

      0
      分享至

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



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

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

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

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



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

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



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

      替換Spring原生單元測(cè)試的注解@SpringBootTest



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



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



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

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

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

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

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

      1、不需要啟動(dòng)Spring容器

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

      3、啟動(dòng)速度快、執(zhí)行速度快、開(kāi)發(fā)簡(jiǎn)單且效率高

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


      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(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)推薦
      熱點(diǎn)推薦
      塞爾比:沒(méi)有丁俊暉,就沒(méi)有中國(guó)斯諾克,更沒(méi)有我們的大把獎(jiǎng)金

      塞爾比:沒(méi)有丁俊暉,就沒(méi)有中國(guó)斯諾克,更沒(méi)有我們的大把獎(jiǎng)金

      風(fēng)過(guò)鄉(xiāng)
      2026-05-14 21:55:12
      雷軍國(guó)宴“追星”馬斯克,握手合影全程陪笑

      雷軍國(guó)宴“追星”馬斯克,握手合影全程陪笑

      三言科技
      2026-05-14 19:57:11
      被曝涉黃,觸目驚心!網(wǎng)友怒了: 看得脊背發(fā)涼

      被曝涉黃,觸目驚心!網(wǎng)友怒了: 看得脊背發(fā)涼

      每日經(jīng)濟(jì)新聞
      2026-05-13 21:30:06
      1978年張震說(shuō)毛主席也有缺點(diǎn)和錯(cuò)誤,鄧小平大喜:這個(gè)部長(zhǎng)懂政治

      1978年張震說(shuō)毛主席也有缺點(diǎn)和錯(cuò)誤,鄧小平大喜:這個(gè)部長(zhǎng)懂政治

      帝哥說(shuō)史
      2026-05-14 22:25:33
      致1死5傷(其中1人傷勢(shì)較重),警方:常某朋(男,40歲)涉嫌醉駕

      致1死5傷(其中1人傷勢(shì)較重),警方:常某朋(男,40歲)涉嫌醉駕

      山西晚報(bào)
      2026-05-14 10:04:48
      鄭強(qiáng)翻車,翻得一點(diǎn)也不冤!

      鄭強(qiáng)翻車,翻得一點(diǎn)也不冤!

      梳子姐
      2026-05-13 12:19:44
      狼來(lái)了?外資將殺入電信業(yè),三大運(yùn)營(yíng)商瑟瑟發(fā)抖?資費(fèi)要降價(jià)了!

      狼來(lái)了?外資將殺入電信業(yè),三大運(yùn)營(yíng)商瑟瑟發(fā)抖?資費(fèi)要降價(jià)了!

      Thurman在昆明
      2026-05-13 11:39:22
      美國(guó)歌手隆胸3年后反悔:太大了,準(zhǔn)備取出

      美國(guó)歌手隆胸3年后反悔:太大了,準(zhǔn)備取出

      影視情報(bào)室
      2026-05-15 01:37:14
      因FIFA每人每天1.1萬(wàn)美元補(bǔ)貼,加納將帶3名本土聯(lián)賽國(guó)腳參賽

      因FIFA每人每天1.1萬(wàn)美元補(bǔ)貼,加納將帶3名本土聯(lián)賽國(guó)腳參賽

      懂球帝
      2026-05-14 18:17:06
      重磅達(dá)成協(xié)議!巴西后腰同意加盟曼聯(lián),周薪10萬(wàn)英鎊敲定

      重磅達(dá)成協(xié)議!巴西后腰同意加盟曼聯(lián),周薪10萬(wàn)英鎊敲定

      夜白侃球
      2026-05-14 09:01:43
      55歲大哥尿毒癥去世,平時(shí)勤喝水愛(ài)運(yùn)動(dòng),醫(yī)生嘆息:4事做過(guò)頭了

      55歲大哥尿毒癥去世,平時(shí)勤喝水愛(ài)運(yùn)動(dòng),醫(yī)生嘆息:4事做過(guò)頭了

      路醫(yī)生健康科普
      2026-05-14 17:44:09
      蘋果官宣:5月15日,新iPhone降價(jià)!

      蘋果官宣:5月15日,新iPhone降價(jià)!

      搞機(jī)小帝
      2026-05-15 00:10:05
      女子稱58同城求職遇“不接受潛規(guī)則就不錄用” 平臺(tái):3個(gè)工作日內(nèi)核查處理

      女子稱58同城求職遇“不接受潛規(guī)則就不錄用” 平臺(tái):3個(gè)工作日內(nèi)核查處理

      紅星新聞
      2026-05-14 22:16:14
      烏克蘭攤牌:不要領(lǐng)土了,要徹底廢掉俄羅斯的戰(zhàn)爭(zhēng)能力

      烏克蘭攤牌:不要領(lǐng)土了,要徹底廢掉俄羅斯的戰(zhàn)爭(zhēng)能力

      林子說(shuō)事
      2026-05-14 18:39:12
      心理學(xué)上有一個(gè)說(shuō)法叫稀缺心態(tài):如果你發(fā)現(xiàn)一個(gè)人很“摳”,那“摳”只會(huì)是他身上最小的問(wèn)題。你還是趕緊跑路要緊

      心理學(xué)上有一個(gè)說(shuō)法叫稀缺心態(tài):如果你發(fā)現(xiàn)一個(gè)人很“摳”,那“摳”只會(huì)是他身上最小的問(wèn)題。你還是趕緊跑路要緊

      心理觀察局
      2026-05-14 09:29:44
      美股收盤:納指、標(biāo)普500指數(shù)續(xù)創(chuàng)新高 英偉達(dá)總市值達(dá)5.71萬(wàn)億美元

      美股收盤:納指、標(biāo)普500指數(shù)續(xù)創(chuàng)新高 英偉達(dá)總市值達(dá)5.71萬(wàn)億美元

      財(cái)聯(lián)社
      2026-05-15 04:02:11
      突破4000億!蘇州誕生史上最高市值上市公司,背后父子身價(jià)1個(gè)月暴漲近千億

      突破4000億!蘇州誕生史上最高市值上市公司,背后父子身價(jià)1個(gè)月暴漲近千億

      創(chuàng)客公社-江蘇第一創(chuàng)投媒體
      2026-05-14 20:08:41
      13年后雷軍合影馬斯克,全網(wǎng)沸騰

      13年后雷軍合影馬斯克,全網(wǎng)沸騰

      新浪財(cái)經(jīng)
      2026-05-15 00:49:53
      黃圣依離婚真選對(duì)了,楊子?jì)寢屘珪?huì)演戲,對(duì)楊子新女友滿臉寵溺

      黃圣依離婚真選對(duì)了,楊子?jì)寢屘珪?huì)演戲,對(duì)楊子新女友滿臉寵溺

      觀魚聽(tīng)雨
      2026-05-13 23:19:31
      八部門突然發(fā)文!余額寶被“移出”收銀臺(tái),發(fā)生啥了

      八部門突然發(fā)文!余額寶被“移出”收銀臺(tái),發(fā)生啥了

      呼呼歷史論
      2026-05-14 00:54:13
      2026-05-15 06:07:00
      51Testing軟件測(cè)試網(wǎng) incentive-icons
      51Testing軟件測(cè)試網(wǎng)
      中國(guó)軟件測(cè)試人的精神家園
      1570文章數(shù) 13268關(guān)注度
      往期回顧 全部

      科技要聞

      馬斯克說(shuō)會(huì)談很順利 黃仁勛點(diǎn)贊 庫(kù)克比耶

      頭條要聞

      馬斯克幼子裝扮“火”了 衣服包包都是中國(guó)造

      頭條要聞

      馬斯克幼子裝扮“火”了 衣服包包都是中國(guó)造

      體育要聞

      爭(zhēng)議抽象天王山,和季后賽最穩(wěn)定中鋒

      娛樂(lè)要聞

      何九華官宣當(dāng)爸!全程不提孩子?jì)?/h3>

      財(cái)經(jīng)要聞

      李強(qiáng)會(huì)見(jiàn)美國(guó)工商界代表

      汽車要聞

      雙零重力座椅/AI智能體/調(diào)光天幕 啟境GT7內(nèi)飾發(fā)布

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

      藝術(shù)
      旅游
      房產(chǎn)
      健康
      教育

      藝術(shù)要聞

      花園里,花叢中

      旅游要聞

      開(kāi)屏?xí)r光機(jī)|四百年西山行:徐霞客的登臨之路與“六萬(wàn)人同耍西山”

      房產(chǎn)要聞

      海南樓市新政要出!擬調(diào)公積金貸款額度,最高可貸168萬(wàn)!

      專家揭秘干細(xì)胞回輸?shù)陌踩L(fēng)險(xiǎn)

      教育要聞

      山東中小學(xué) 2026 暑假放假時(shí)間匯總

      無(wú)障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 亚洲熟女片嫩草影院| 久久人人爽人人爽人人片aV东京热| 另类 专区 欧美 制服| 欧美xxxx做受性欧美88| 97色精品视频在线观看| 精品国产成人av在线| 无遮挡粉嫩小泬久久久久久久| 国产精品久久久久蜜臀| 中国无码人妻丰满熟妇啪啪软件| 国内最真实的xxxx人伦| 国产亚洲精品一区二区不卡| 日韩女人毛片在线播放| 成人深夜节目在线观看| 无码日韩精品一区二区人妻| 国产精品三级国产专用不卡| 久久人人爽人人爽人人爽| 国产亚洲精品久久久久久无几年桃 | 亚洲第一成年免费网站| 亚洲第一色区| 国产乱子伦精品免费视频| 久久久久人妻一区精品下载| 国产顶级熟妇高潮xxxxx| 日日摸夜夜爽-| 67194熟妇在线观看线路1 | 亚洲av永久无码精品天堂久久| 人妻丰满熟妇AV无码片| 狠狠爱无码一区二区三区| av天堂久久天堂av| 2021国产最新在线视频一区| 国产一区二区三区美女| 亚洲成a人片在线观看www| 人人妻人人做人人爽夜欢视频| 国产精品自拍中文字幕| 精品国产69亚洲一区二区三区| 日产日韩亚洲欧美综合下载| 日本妇人成熟免费| 国产XXXX| 91蜜芽尤物福利在线观看| 女女同性女同区二区国产| 国产在线精品一区二区三区直播| 啪啪视频一区二区三区入囗|