国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

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

0
分享至

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

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

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

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

1、使用Spring原生的方法進行測試。我們假設ID=1的用戶記錄是存在的,那么查詢結(jié)果必定不為NULL。假設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)用已編寫的代碼并返回我們設置的預期執(zhí)行結(jié)果)。

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

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

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

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

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

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

1、不需要啟動Spring容器

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

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

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

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

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.

相關推薦
熱點推薦
baby再曝私下聚會視頻!濃妝艷抹穿旗袍,表情浮夸大喊疑精神失常

baby再曝私下聚會視頻!濃妝艷抹穿旗袍,表情浮夸大喊疑精神失常

八卦王者
2026-02-27 12:12:17
夸美國空氣香甜的楊舒平,已被美驅(qū)逐出境,如今回國下場怎么樣了

夸美國空氣香甜的楊舒平,已被美驅(qū)逐出境,如今回國下場怎么樣了

談史論天地
2026-02-07 13:20:03
比艷照門更轟動,曾經(jīng)的臺灣第一女主播璩美鳳

比艷照門更轟動,曾經(jīng)的臺灣第一女主播璩美鳳

霹靂炮
2026-02-25 21:01:00
中央軍委全力反腐敗,說明中國人民解放軍將要擔大任,干大事!

中央軍委全力反腐敗,說明中國人民解放軍將要擔大任,干大事!

安安說
2026-01-29 09:33:17
吏部尚書、兵部尚書、戶部尚書,三者相比,誰在實權(quán)上更勝一籌?

吏部尚書、兵部尚書、戶部尚書,三者相比,誰在實權(quán)上更勝一籌?

掠影后有感
2026-02-26 11:28:52
以色列消息人士說對伊朗第一階段打擊將持續(xù)4天,伊朗領導人都是打擊目標

以色列消息人士說對伊朗第一階段打擊將持續(xù)4天,伊朗領導人都是打擊目標

界面新聞
2026-02-28 15:25:12
農(nóng)村出來的孩子為啥會討厭農(nóng)村?網(wǎng)友:在農(nóng)村才知道農(nóng)村的惡

農(nóng)村出來的孩子為啥會討厭農(nóng)村?網(wǎng)友:在農(nóng)村才知道農(nóng)村的惡

帶你感受人間冷暖
2026-02-23 00:20:13
賭中國不會還手?巴拿馬總統(tǒng)被秒打臉,中方第五波反制馬上就到

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

石江月
2026-02-28 17:09:34
女子哈爾濱飛三亞經(jīng)停南京,下廊橋獨享“專人通道”,原來是只她一人飛兩個航段,機場人員回應

女子哈爾濱飛三亞經(jīng)停南京,下廊橋獨享“專人通道”,原來是只她一人飛兩個航段,機場人員回應

極目新聞
2026-02-27 15:48:22
“考研6年,卻敗給了一條黑褲襪”,90后女生活成研王爺,被群嘲

“考研6年,卻敗給了一條黑褲襪”,90后女生活成研王爺,被群嘲

妍妍教育日記
2026-02-27 18:35:54
中國正加速拋售美債,美專家:中國用了新拋售方式,完全無法干預

中國正加速拋售美債,美專家:中國用了新拋售方式,完全無法干預

似水流年忘我
2026-01-29 01:24:08
那些年腦子進水買的東西!網(wǎng)友:受命于天,既壽永昌!

那些年腦子進水買的東西!網(wǎng)友:受命于天,既壽永昌!

夜深愛雜談
2026-02-27 20:49:13
可打美航母!英媒:中國或違反聯(lián)合國規(guī)定,運超高音速導彈去伊朗

可打美航母!英媒:中國或違反聯(lián)合國規(guī)定,運超高音速導彈去伊朗

通鑒史智
2026-02-26 09:20:17
被勇士放棄的榜眼秀!加盟美國男籃,虐菜都費勁了

被勇士放棄的榜眼秀!加盟美國男籃,虐菜都費勁了

德譯洋洋
2026-02-28 12:14:20
多地試點開征新能源汽車“里程稅”不實(2026·02·28)

多地試點開征新能源汽車“里程稅”不實(2026·02·28)

今日辟謠
2026-02-28 18:33:11
蘋果2026首場發(fā)布會:iPhone 17e領銜,最便宜MacBook來了!

蘋果2026首場發(fā)布會:iPhone 17e領銜,最便宜MacBook來了!

i王石頭
2026-03-01 00:15:10
免去劉忠義的公安部部長助理職務

免去劉忠義的公安部部長助理職務

創(chuàng)作者_W4T9
2026-02-27 20:07:55
伊朗革命衛(wèi)隊最新聲明!

伊朗革命衛(wèi)隊最新聲明!

占豪
2026-03-01 00:35:19
以總理:美以軍事行動目標是推翻伊朗政權(quán)

以總理:美以軍事行動目標是推翻伊朗政權(quán)

界面新聞
2026-02-28 16:24:46
14億人都不會忘卻!揭開核酸大王張核子的真面具:權(quán)力變現(xiàn)大公

14億人都不會忘卻!揭開核酸大王張核子的真面具:權(quán)力變現(xiàn)大公

大魚簡科
2026-02-07 09:52:29
2026-03-01 01:23:00
51Testing軟件測試網(wǎng) incentive-icons
51Testing軟件測試網(wǎng)
中國軟件測試人的精神家園
1528文章數(shù) 13252關注度
往期回顧 全部

科技要聞

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

頭條要聞

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

頭條要聞

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

體育要聞

球隊主力全報銷?頂風擺爛演都不演了

娛樂要聞

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

財經(jīng)要聞

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

汽車要聞

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

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

藝術
時尚
手機
親子
軍事航空

藝術要聞

驚艷!這位天使般的女子與油畫讓人心動不已!

這6款發(fā)色居然這么火?50張圖可以直接給tony

手機要聞

澎湃OS再次公布進展通報:10個問題,僅修復一則!

親子要聞

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

軍事要聞

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

無障礙瀏覽 進入關懷版