精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

小白搞 Spring Boot 單元測試

開發 架構
進行過JavaWeb開發的同學都了解,在進行后臺開發時不僅需要完成系統功能的開發,為了保證系統的健壯性還要同步編寫對應的單元測試類。

[[420921]]

大家好,我是田維常,今天給大家分享來自于一位小伙的投稿。

內容是:Spring Boot 中的單元測

前言

何為單元測試

單元測試的目的: 測試當前所寫的代碼是否是正確的, 例如輸入一組數據, 會輸出期望的數據; 輸入錯誤數據, 會產生錯誤異常等. 在單元測試中, 我們需要保證被測系統是獨立的(SUT 沒有任何的 DOC), 即當被測系統通過測試時, 那么它在任何環境下都是能夠正常工作的. 編寫單元測試時, 僅僅需要關注單個類就可以了. 而不需要關注例如數據庫服務, Web 服務等組件。

背景

進行過JavaWeb開發的同學都了解,在進行后臺開發時不僅需要完成系統功能的開發,為了保證系統的健壯性還要同步編寫對應的單元測試類。基于Spring Boot開發的項目中的test包用于存放單元測試類,同時也提供了對應的注解來進行單元測試的編寫,本文結合Mock對Spring Boot中的單元測試進行總結。

環境:JDK1.8+、Spring Boot、mockito。

單元測試的引入

在Spring Boot中引入單元測試只需在pom文件中加入如下依賴,其中提供了JUnit、SpringBoot Test等常見單元測試庫。

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-test</artifactId> 
  4.     <scope>test</scope> 
  5. </dependency> 
  6. <dependency> 
  7.     <groupId>org.mockito</groupId> 
  8.     <artifactId>mockito-core</artifactId> 
  9.     <version>2.0.111-beta</version> 
  10. </dependency> 

單元測試的創建

每個單元測試類對應項目中的一個程序類,每個單元測試方法對應程序類中的一個方法,為保證所測試方法的正確性,至少需要設計四個以上的測試用例,包含:正確用例、錯誤用例和邊界用例。編寫的注釋事項如下:

  • 測試類的位置位于項目test包下,包的層級結構與項目相同;
  • 測試類的命名規則通常為 xxxTest.java,其中xxx表示待測試類名;
  • 測試類中方法命名規則為testXxx,其中Xxx表示待測試方法名 ;
  • 測試方法上加上注解 @Test;

話不多說,咱們直接開干。

常用注解

當下是注解盛行時代,我們先來了解一下相關的幾個注解。

注解 說明
@RunWith 更改測試運行器 ,   缺省值org.junit.runner.Runner
@Before 初始化方法,執行當前測試類的每個測試方法前執行
@Test 測試方法,在這里可以測試期望異常和超時時間
@Test(timeout = 10000) 超時測試方法,若測試方法未在指定時間內結束則junit自動將其標記為失敗
@Transactional 聲明式事務管理,用于需數據庫事務管理的測試方法
@Rollback(true) 數據庫回滾,避免測試數據污染數據庫

相關理論和技術點,現在已經鋪墊完成,下面,我們使用代碼來實現。

代碼實現

我們分別做三層的測試:controller、service、dao

Service層測試

  1. @RunWith(SpringRunner.class) 
  2. @SpringBootTest(classes = Application.class) 
  3. public class UserServiceTest { 
  4.  
  5.     @Autowired 
  6.     private UserService userService; 
  7.  
  8.     /** 
  9.      * 測試獲取用戶 
  10.      */ 
  11.     @Test(timeOut = 300000) 
  12.     @Transactional 
  13.     public void testGetUser() { 
  14.         UserEntity userEntity = userService.findByName("zhangSan"); 
  15.         Assert.assertNotNull(userEntity); 
  16.         Assert.assertEquals("zhangSan", userEntity.getName()); 
  17.     } 

是不是很簡單呢?

Controller層測

controller層,也可以稱之為網絡請求測試。對于網絡請求進行測試的情形多見于應用的Controller層。Spring測試框架提供MockMvc對象,可以在不需要客戶端-服務端請求的情況下進行Web測試.

測試開始之前需要建立測試環境,setup方法被@Before修飾。通過MockMvcBuilders工具,創建一個MockMvc對象。

  1. @RunWith(SpringRunner.class) 
  2. @SpringBootTest(classes = Application.class) 
  3. class UserControllerTest { 
  4.  
  5.     @Autowired 
  6.     private UserController userController ; 
  7.     @Autowired 
  8.     private WebApplicationContext context; 
  9.     private MockMvc mockMvc; 
  10.  
  11.     @Before 
  12.     public void setup(){ 
  13.         mockMvc = MockMvcBuilders.standaloneSetup(userController).build; 
  14.     } 
  15.  
  16.     /** 
  17.      * 獲取用戶列表 
  18.      */ 
  19.     @Test(timeOut = 300000) 
  20.     public void testGetUserList() throws Exception { 
  21.         String url = "/user/getUserList"
  22.         MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(url)) 
  23.                 .andExpect(MockMvcResultMatchers.status().isOk()).andReturn(); 
  24.         Assert.assertNotNull(mvcResult); 
  25.     } 

DAO層測試

由于DAO層的方法直接操作數據庫,為避免測試數據對數據庫造成污染,使用注解@Transactional和@Rollback在測試完成后對測試數據進行回滾。

  1. @RunWith(SpringRunner.class) 
  2. @SpringBootTest 
  3. public class ScoreControllerTestNew { 
  4.  
  5.     @Autowired 
  6.     private UserDao userDao; 
  7.  
  8.     /** 
  9.      * 測試插入數據 
  10.      */ 
  11.     @Test 
  12.     @Rollback(value = true
  13.     @Transactional 
  14.     public void testInsert() { 
  15.         User userZhang = new User(); 
  16.         userZhang.setName("zhangSan"); 
  17.         userZhang.setAge(23); 
  18.         userZhang.setGender(0); 
  19.         userZhang.setEmail("123@test.com"); 
  20.         int n = userDao.insert(userZhang); 
  21.         Assert.assertEquals(1, n); 
  22.     } 

到此,關于三個層面的測試就已經搞定了,下面我們來看看,如何使用Mockito模擬數據庫操作。

使用Mockito模擬數據庫操作

前面在介紹web請求測試時使用了Mock技術,該技術常用于被測試模塊(方法)依賴于外部系統(web服務、中間件或是數據庫)時。

Mock 的中文譯為仿制的,模擬的,虛假的。對于測試框架來說,即構造出一個模擬/虛假的對象,使我們的測試能順利進行下去。

Mockito 是當前最流行的 單元測試 Mock 框架。采用 Mock 框架,我們可以 虛擬 出一個 外部依賴,降低測試 組件 之間的 耦合度,只注重代碼的 流程與結果,真正地實現測試目的。

由于web服務或數據庫不可達時,可以對其進行Mock,在測試時不需要真實的模塊也可完成測試。

常用的Mockito方法如下:

方法 簡介
Mockito.mock(classToMock) 模擬對象
Mockito.when(methodCall).thenReturn(value) 參數匹配
Mockito.doReturn(toBeReturned).when(mock).[method] 參數匹配(直接執行不判斷)
Mockito.when(methodCall).thenAnswer(answer)) 預期回調接口生成期望值
Mockito.doNothing().when(mock).[method] 不做任何返回

在使用Mockito對DAO層的單元測試進行模擬后,得到的新的單元測試類如下 :

  1. @RunWith(SpringRunner.class) 
  2. public class UserDaoTest { 
  3.     @MockBean 
  4.     private UserDao userDao; 
  5.  
  6.     private User userZhang = new User(); 
  7.     userZhang.setName("zhangSan"); 
  8.     userZhang.setAge(23); 
  9.  
  10.     @Before 
  11.     public void setup() { 
  12.         Mockito.when(userDao.findByName("zhangSan")).willReturn(userZhang); 
  13.         Mockito.when(userDao.findByName("liSi")).willReturn(null); 
  14.     } 
  15.  
  16.     @Test 
  17.     public void testGetUser() { 
  18.         Assert.assertEquals(userZhang, userDao.findByName("zhangSan")); 
  19.         Assert.assertEquals(null, userDao.findByName("liSi")); 
  20.     } 

關于mockito相關,請參考官網:https://site.mockito.org/

后記 

本文重在用代碼案例講解單元測試,篇幅有限,先分享到這里,如有不當之處,敬請諒解指出。

本文轉載自微信公眾號「Java后端技術全棧」,可以通過以下二維碼關注。轉載本文請聯系Java后端技術全棧公眾號。

 

責任編輯:武曉燕 來源: Java后端技術全棧
相關推薦

2025-06-12 03:10:00

2021-01-07 14:06:30

Spring BootJUnit5Java

2023-09-27 23:43:51

單元測試Spring

2013-06-04 09:49:04

Spring單元測試軟件測試

2017-01-14 23:42:49

單元測試框架軟件測試

2021-08-26 11:00:54

Spring BootJUnit5Java

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2020-08-18 08:10:02

單元測試Java

2020-07-21 14:40:45

Spring Boot單元測試Java

2017-03-23 16:02:10

Mock技術單元測試

2021-04-23 07:33:10

SpringSecurity單元

2021-05-05 11:38:40

TestNGPowerMock單元測試

2023-07-26 08:58:45

Golang單元測試

2020-05-07 17:30:49

開發iOS技術

2011-07-04 18:16:42

單元測試

2011-05-16 16:52:09

單元測試徹底測試

2009-09-01 10:20:06

protected方法單元測試

2012-05-17 09:09:05

Titanium單元測試

2010-01-28 15:54:19

Android單元測試
點贊
收藏

51CTO技術棧公眾號

羞羞电影在线观看www| 国产黄色一区二区| 精品一区不卡| 欧美精品亚洲二区| 成人在线免费观看视频网站| 日韩在线观看视频一区| 青青草原综合久久大伊人精品优势| 深夜福利国产精品| 美女日批在线观看| 蜜桃av一区二区三区电影| 亚洲国产cao| 日本一区二区三区四区高清视频 | 极品美乳网红视频免费在线观看| 日本aⅴ亚洲精品中文乱码| 欧美国产日产韩国视频| 成人性生交大免费看| 国产精品va视频| 日本韩国一区二区三区| 国产一级大片免费看| 国产女主播在线写真| 国产高清精品久久久久| 国产精品视频公开费视频| 久久久精品人妻一区二区三区四| 精品视频97| 亚洲精品电影久久久| 亚洲天堂av一区二区三区| 国产高清不卡| 亚洲成人综合在线| 日本三日本三级少妇三级66| 国产三级视频在线| 99久久亚洲一区二区三区青草 | 日本a级片免费观看| 91蜜桃在线视频| 中文字幕永久在线不卡| 欧美日韩一区二区视频在线观看| 亚洲乱码精品久久久久..| 久久99精品国产.久久久久久| 人体精品一二三区| 日本熟妇色xxxxx日本免费看| 一区二区三区四区电影| 最近中文字幕mv在线一区二区三区四区 | 精品国产不卡一区二区三区| 日本r级电影在线观看| 欧美性生活一级| 在线观看亚洲专区| 成人在线观看黄| 欧美xx视频| 黄网动漫久久久| 水蜜桃色314在线观看| 久久不射影院| 亚洲综合一区二区精品导航| 玖玖精品在线视频| av电影免费在线观看| 亚洲视频一区二区在线| 天天综合中文字幕| a级网站在线播放| 亚洲精品五月天| 日本一区二区三区四区在线观看| 久草在线网址| 日本一区二区综合亚洲| 日产精品久久久一区二区| 国产小视频在线播放| 久久久噜噜噜久久中文字幕色伊伊| 精品一区二区久久久久久久网站| 色猫av在线| 91理论电影在线观看| 国偷自产av一区二区三区小尤奈| 神马一区二区三区| 久久丝袜美腿综合| 日韩成人在线资源| 男人天堂久久久| 一区二区三区自拍| 男人插女人视频在线观看| √最新版天堂资源网在线| 欧美日韩中国免费专区在线看| 国产美女无遮挡网站| 亚洲综合在线电影| 91精品国产综合久久久久久久| 尤物网站在线看| 911精品国产| 亚洲欧美日韩国产中文专区| 精品熟妇无码av免费久久| 999久久久亚洲| 欧美交受高潮1| 99久久精品国产亚洲| 奇米在线7777在线精品| 91手机在线视频| 午夜性色福利影院| 国产精品美女一区二区三区 | 人成在线免费网站| 欧美视频完全免费看| 可以看的av网址| 亚洲区小说区图片区qvod| 久久精品国产亚洲7777| 日韩精品在线不卡| 麻豆精品一二三| 精品欧美日韩在线| 999在线视频| 五月婷婷综合在线| 天天干天天综合| 欧美大胆a级| 久久精品亚洲精品| www.国产com| 国产成都精品91一区二区三| 日韩av电影在线观看| 丁香花在线高清完整版视频| 欧美视频在线不卡| 亚洲 欧美 日韩在线| 欧美国产一级| 热久久免费国产视频| 亚洲国产精品久久久久久久| 欧美高清在线一区二区| 亚洲中文字幕无码av永久| 欧美韩国日本| 亚洲欧美日韩国产中文专区| 国产精品 欧美 日韩| 韩国一区二区在线观看| 欧美一区二区三区在线免费观看| av小次郎在线| 欧美日韩激情一区二区三区| 一二三不卡视频| 欧美视频在线观看| 成人福利视频在线观看| а天堂8中文最新版在线官网| 亚洲第一成人在线| 色综合久久久无码中文字幕波多| 欧美色女视频| 日韩av成人在线观看| 视频一区 中文字幕| 亚洲精品菠萝久久久久久久| 日本77777| 久久视频在线| 国产精品爽黄69天堂a| 国产资源在线播放| 91久久奴性调教| 成人免费看aa片| 亚洲欧美视频| 久久综合一区| 色一区二区三区| 日韩av在线免费观看| 日韩av免费网址| 国产成人福利片| 亚洲色婷婷久久精品av蜜桃| 麻豆精品一区| 欧美二区乱c黑人| 成人av无码一区二区三区| 亚洲女同一区二区| 黄色一级片免费播放| 中文字幕人成人乱码| 96sao精品视频在线观看| 国精产品一区| 日韩亚洲欧美成人一区| 麻豆changesxxx国产| 国产精品456| 亚洲色成人www永久在线观看| 2020最新国产精品| 97香蕉久久超级碰碰高清版 | 做爰视频毛片视频| 国产精品免费看片| 日本精品一区在线| 欧美日韩ab| 精品一区二区三区日本| 成人性生交大片免费网站| 亚洲天堂久久av| 亚洲资源在线播放| 亚洲精品国产a| 俄罗斯黄色录像| 免费在线观看成人av| 天天久久人人| 国产精品99久久免费| 国内偷自视频区视频综合| 香蕉视频黄在线观看| 欧美最猛性xxxxx直播| 天天色天天综合| 成人午夜短视频| 无遮挡又爽又刺激的视频| 91免费精品| 国产精品久久久久久免费观看| 欲香欲色天天天综合和网| 国产一区二区三区毛片| 99国产成人精品| 欧美日韩免费观看中文| 你懂得视频在线观看| 国产成人av一区二区三区在线观看| 久久久久免费看黄a片app| av一区二区高清| www.成人av| 88xx成人免费观看视频库 | 亚洲成人亚洲激情| 在线观看视频中文字幕| 亚洲一区视频在线| 亚洲色图第四色| 国产91对白在线观看九色| 亚洲人成色77777| 欧美韩日精品| 日韩精品极品视频在线观看免费| 国产亚洲高清在线观看| 欧美亚洲视频一区二区| 黄色免费网站在线| 国产午夜精品理论片a级探花| 91亚洲视频在线观看| 精品国产成人av| 中文字幕亚洲欧美日韩| 久久免费视频色| 18禁一区二区三区| 麻豆视频一区二区| 欧美极品欧美精品欧美图片| 亚洲最新色图| 亚洲欧美日产图| 影视先锋久久| 国产伦精品一区二区三区照片91| 人人精品久久| 国产精品成人免费电影| 女人让男人操自己视频在线观看| 久久在线免费视频| 高清av电影在线观看| 日韩精品在线电影| 成人小说亚洲一区二区三区| 欧美精品vⅰdeose4hd| 亚洲乱码国产乱码精品| 精品国产福利视频| 九九热国产在线| 亚洲男人的天堂在线观看| 一二三四在线观看视频| 久久丝袜美腿综合| 天堂久久久久久| 成人福利视频网站| 日本成人在线免费| 国产一区二区免费在线| 色免费在线视频| 日av在线不卡| 亚洲福利精品视频| 日日噜噜夜夜狠狠视频欧美人| 国产最新免费视频| 日韩一区二区久久| 97视频在线免费| 亚洲国内自拍| 欧美黑人经典片免费观看| 一区三区视频| 国产手机免费视频| 亚洲福利精品| 国产毛片视频网站| 亚洲人成在线影院| 欧美一级视频在线播放| 尹人成人综合网| 久久99久久99精品| 99在线|亚洲一区二区| 内射国产内射夫妻免费频道| 夜夜精品视频| 亚洲色欲综合一区二区三区| 久久久精品网| 中文字幕在线观看第三页| 日本 国产 欧美色综合| 日韩va在线观看| 国产精品综合二区| 少妇熟女视频一区二区三区| 成人免费观看视频| 欧美bbbbb性bbbbb视频| 久久久久久久久久久久久久久99 | 亚洲色图欧美视频| 亚洲免费中文字幕| 最新国产在线观看| 久久av资源网站| а√天堂中文在线资源8| 91精品国产高清| 国产经典一区| 91久久国产综合久久91精品网站 | 亚洲国产美女精品久久久久∴| 色婷婷av一区二区三区之红樱桃 | 欧美国产综合视频| 波多野结衣在线观看一区二区| 成年人免费观看的视频| 亚洲欧美一区在线| 免费在线激情视频| 久久国产精品一区二区| 男插女视频网站| 久久综合九色综合欧美98| 日本黄色激情视频| 亚洲一区二区三区视频在线播放 | 日韩成人免费在线视频| 色婷婷精品久久二区二区蜜臀av| 在线观看亚洲一区二区| 欧美va亚洲va香蕉在线| 精品视频一二区| 不卡毛片在线看| 永久免费毛片在线播放| 91九色在线视频| 妖精一区二区三区精品视频| 国产又粗又硬又长| 麻豆九一精品爱看视频在线观看免费| 午夜剧场高清版免费观看 | 91精品在线观看入口| 少妇人妻精品一区二区三区| 伊人男人综合视频网| 国产白丝在线观看| 国产欧美精品一区二区| 欧美黑白配在线| 国产精品h视频| 久久欧美肥婆一二区| 日韩不卡的av| 国产女人水真多18毛片18精品视频| 中文字幕av免费在线观看| 在线看不卡av| 国产91免费看| 久久国产精品久久久| 欧美大胆性生话| 国产精品久久久久久久久婷婷 | 香蕉久久精品| 日本中文字幕一级片| 日本欧美大码aⅴ在线播放| www男人天堂| 自拍偷在线精品自拍偷无码专区 | 黄页网站在线| 成人a在线观看| 精品国产精品| 欧美 国产 综合| 国产盗摄视频一区二区三区| 亚洲色图 激情小说| 欧美日韩一二三四五区| 国产综合视频在线| 美女国内精品自产拍在线播放| 日韩电影免费观看高清完整版| 国产乱码精品一区二区三区中文| 一本精品一区二区三区| 182午夜在线观看| 国产日韩欧美精品在线| 九九九在线观看| 日韩av一区二区在线观看| 福利小视频在线| 91亚洲精品丁香在线观看| 久久久久国产精品| 天堂视频免费看| 国产精品久久久久久久第一福利 | 麻豆精品久久精品色综合| 男人天堂av电影| 一本色道亚洲精品aⅴ| 色视频在线观看免费| 国产69久久精品成人| 色先锋久久影院av| 男人天堂1024| 91在线观看视频| 三级视频在线观看| 亚洲毛片在线看| 极品美女一区| 五月天亚洲综合情| 美女网站色91| 国产午夜手机精彩视频| 91精品国产综合久久福利软件| 高h视频在线观看| 147欧美人体大胆444| 欧美视频久久| 日韩片在线观看| 色94色欧美sute亚洲13| 国产美女视频一区二区三区 | 一级黄色大片免费| 精品国产美女在线| 欧美另类中文字幕| 国产日韩亚洲欧美在线| 不卡视频在线观看| 国产亚洲欧美在线精品| 夜夜躁日日躁狠狠久久88av| 小说区图片区亚洲| 天堂а√在线中文在线| 成人h动漫精品| 国产一级淫片a视频免费观看| 国产一区二区三区视频 | 天堂影院一区二区| 亚洲毛片亚洲毛片亚洲毛片| 91精品国产全国免费观看 | 婷婷久久综合九色综合绿巨人| 亚洲 另类 春色 国产| 国产精品久久久久久久久免费| 99精品视频在线观看播放| 国产性猛交96| 色噜噜狠狠成人中文综合| 日本韩国在线视频爽| 91pron在线| 久久国产高清| 我要看黄色一级片| 亚洲第一偷拍网| 日本欧美韩国| bt天堂新版中文在线地址| 久久久国产综合精品女国产盗摄| 亚洲性在线观看| 国内精品模特av私拍在线观看| 精品美女视频| 国产a级片视频| 欧美专区在线观看一区| 欧美韩日亚洲| 日韩亚洲不卡在线| 成人午夜短视频| 一级特黄aaa大片| 9.1国产丝袜在线观看| 欧美高清在线| 免费在线观看你懂的| 日韩精品一区二区三区在线| 日本在线视频一区二区| 人人妻人人添人人爽欧美一区| 亚洲欧洲av一区二区三区久久| 午夜视频福利在线|