亚洲中文字幕乱码亚洲-蜜桃成熟视频在线观看-免费中文字幕视频在线-中国五十路熟妇洗澡视频-亚洲av伊人啪啪c-国产精品成人一区二区-国产自拍视频一区在线观看-成人一区不卡二区三区四区-亚洲情精品中文字幕99在线

網(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進行單元測試,我們可以直接模擬出結果,而不需要準備數(shù)據(jù)源。本文以簡單的用戶功能為例,說明如何使用Mock來進行DAO層的單元測試。

1、使用Spring原生的方法進行測試。我們假設ID=1的用戶記錄是存在的,那么查詢結果必定不為NULL。假設ID=2的用戶記錄是不存在的,那么查詢結果必定為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í)行結果),而@Mock注解對象的方法則是進行模擬調(diào)用(不會真實調(diào)用已編寫的代碼并返回我們設置的預期執(zhí)行結果)。

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ā)生了改變,那么我們單元測試的結果也會受到影響。例如,數(shù)據(jù)庫中原本存在ID=1的記錄,如果不小心刪掉了,那么我們單測中Assert.assertNotNull的方法就會報錯。而如果使用Mock的形式,無論數(shù)據(jù)庫中是否存在該記錄,我們執(zhí)行DAO層方法的返回值都只依賴于我們在thenReturn方法中設置的值。

總結一下使用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ù)集成、測試架構開發(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.

相關推薦
熱點推薦
腸道是否長息肉,會有4個提示,上廁所時要記的多看一眼!

腸道是否長息肉,會有4個提示,上廁所時要記的多看一眼!

芹姐說生活
2026-04-19 23:32:30
離大譜!大媽沖進餐廳強行放生龍蝦,結果人家是寵物,直接被她救死了...

離大譜!大媽沖進餐廳強行放生龍蝦,結果人家是寵物,直接被她救死了...

英國那些事兒
2026-04-17 23:25:19
日本突襲!28萬億市場,中國被踢出局,高市早苗亮出3張底牌

日本突襲!28萬億市場,中國被踢出局,高市早苗亮出3張底牌

瑛派兒老黃
2026-04-20 10:40:36
廣東一酒店女子拆快遞誤甩飛美工刀打到同事脖頸,酒店:沒有劃到脖子,不是故意的

廣東一酒店女子拆快遞誤甩飛美工刀打到同事脖頸,酒店:沒有劃到脖子,不是故意的

瀟湘晨報
2026-04-19 20:49:12
多名院士研究發(fā)現(xiàn):吃一把花生,就等于吃了兩勺黃油,真的假的?

多名院士研究發(fā)現(xiàn):吃一把花生,就等于吃了兩勺黃油,真的假的?

蜉蝣說
2026-04-20 10:18:20
為什么在我國不允許拍鬼片了?看完網(wǎng)友的真實經(jīng)歷,感覺禁得好

為什么在我國不允許拍鬼片了?看完網(wǎng)友的真實經(jīng)歷,感覺禁得好

情感大頭說說
2026-04-20 03:02:35
砸6700億建雄安,面積抵3個紐約,如今究竟咋樣了?

砸6700億建雄安,面積抵3個紐約,如今究竟咋樣了?

娛樂圈的筆娛君
2026-03-26 12:15:32
遲來的關心猶如砒霜!網(wǎng)友:快退休了我媽突然擔心我值班沒飯吃

遲來的關心猶如砒霜!網(wǎng)友:快退休了我媽突然擔心我值班沒飯吃

夜深愛雜談
2026-04-20 09:16:13
徐明聯(lián)手本拉登家族,400億硬剛中石油,帝國崩塌

徐明聯(lián)手本拉登家族,400億硬剛中石油,帝國崩塌

圓夢的小老頭
2026-04-17 23:52:41
萬字長文!黃仁勛:DeepSeek深度耦合華為,對美國來說將是災難

萬字長文!黃仁勛:DeepSeek深度耦合華為,對美國來說將是災難

財通社
2026-04-19 17:42:25
基辛格談中印戰(zhàn)爭:雙方刻意碰撞結果,中國借印度給各國標明紅線

基辛格談中印戰(zhàn)爭:雙方刻意碰撞結果,中國借印度給各國標明紅線

談史論天地
2026-04-19 07:59:55
聰明又招財!2026年這3個生肖人緣好到爆,財富接不完

聰明又招財!2026年這3個生肖人緣好到爆,財富接不完

毅談生肖
2026-04-20 10:49:51
第185場!1995年至今:詹姆斯季后賽勝場超越馬刺排名第一

第185場!1995年至今:詹姆斯季后賽勝場超越馬刺排名第一

北青網(wǎng)-北京青年報
2026-04-19 20:20:14
考古:大明湖挖出文物證實,濟南是中國唯一5000年連續(xù)建城的城市

考古:大明湖挖出文物證實,濟南是中國唯一5000年連續(xù)建城的城市

文史達觀
2026-03-27 16:15:00
戀愛腦的女人能有多離譜?看完評論區(qū)我愣住了,這些事真的存在嗎

戀愛腦的女人能有多離譜?看完評論區(qū)我愣住了,這些事真的存在嗎

夜深愛雜談
2026-04-19 09:56:53
內(nèi)維爾:阿森納已經(jīng)盡力做到最好,但瓜帥和曼城是一臺機器

內(nèi)維爾:阿森納已經(jīng)盡力做到最好,但瓜帥和曼城是一臺機器

懂球帝
2026-04-20 07:07:06
蘋果斷崖式領先,華為緊隨其后,小米第三

蘋果斷崖式領先,華為緊隨其后,小米第三

科技鋒說
2026-04-19 09:32:52
隨著曼城2-1槍手,利物浦2-1,英超最新排名出爐!槍手70分領跑

隨著曼城2-1槍手,利物浦2-1,英超最新排名出爐!槍手70分領跑

薇說體育
2026-04-20 10:52:44
愛德華茲:整場追著穆雷跑真的很累 他幾乎參與了每一次進攻戰(zhàn)術

愛德華茲:整場追著穆雷跑真的很累 他幾乎參與了每一次進攻戰(zhàn)術

北青網(wǎng)-北京青年報
2026-04-19 20:20:35
魯尼要去美國報道世界杯,科琳希望與他保持距離&分開冷靜

魯尼要去美國報道世界杯,科琳希望與他保持距離&分開冷靜

喜歡歷史的阿繁
2026-04-20 10:48:28
2026-04-20 11:24:49
51Testing軟件測試網(wǎng) incentive-icons
51Testing軟件測試網(wǎng)
中國軟件測試人的精神家園
1558文章數(shù) 13260關注度
往期回顧 全部

科技要聞

藍色起源一級火箭完美回收 客戶衛(wèi)星未入軌

頭條要聞

失蹤女老板被找到 嫌犯曾改名整容還催警察"還我清白"

頭條要聞

失蹤女老板被找到 嫌犯曾改名整容還催警察"還我清白"

體育要聞

七大獎項候選官宣!文班或全票DPOY

娛樂要聞

章子怡!增重20斤素顏拍新片

財經(jīng)要聞

月之暗面IPO迷局

汽車要聞

外觀非常驚艷 全新一代寶馬6系有望回歸

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

數(shù)碼
藝術
游戲
房產(chǎn)
軍事航空

數(shù)碼要聞

內(nèi)存短缺或致蘋果推遲上新 新款Mac Studio據(jù)稱延遲數(shù)月發(fā)布

藝術要聞

王羲之《換鵝帖》尚在人間,驚艷無比!

大司馬稱不想再玩《PUBG》:打的菜還總被噴!

房產(chǎn)要聞

官宣簽約最強城更!海口樓市,突然殺入神秘房企!

軍事要聞

特朗普:美艦向伊朗貨船開火炸出個洞

無障礙瀏覽 進入關懷版