java:springboot單元測試spring-boot-starter-test

背景

Java的單元測試可以使用多個框架,其中比較流行的包括:

  • JUnit:JUnit是Java單元測試最常用的框架,它提供了一套豐富的API,可以方便地編寫測試用例和測試套件。JUnit 5是JUnit的最新版本,引入了許多新功能和改進。
  • Mockito:Mockito是一個模擬框架,可以模擬對象的行為和狀態,以便在單元測試中檢查方法的調用和參數。它提供了一組強大的API,可以方便地創建模擬對象和驗證方法調用。
  • Spring Test:如果你正在使用Spring框架開發應用程序,那么可以使用Spring Test框架進行單元測試。Spring Test提供了一套完整的測試解決方案,可以方便地測試Spring應用程序的各種方面。

Spring Boot Test的主要特點包括:

  • 快速創建測試環境:通過使用Spring Boot的自動化配置功能,可以快速創建測試環境,無需手動配置。
  • 提供豐富的測試功能:Spring Boot Test提供了豐富的測試功能,包括注解支持、MockMvc、RestTemplate等,可以方便地進行單元測試和集成測試。
  • 集成JUnit和Mockito:Spring Boot Test集成了JUnit和Mockito等測試框架和模擬框架,可以方便地編寫測試用例和模擬對象。
  • 簡化測試配置:通過使用Spring Boot的自動化配置功能,可以簡化測試配置,只需關注測試用例的編寫。

Spring Boot Test 包含了這些庫

  • JUnit 5:包含兼容JUnit4,Java 應用程序單元測試的事實標準
  • Spring Test 和 SpringBootTest:對Spring Boot應用程序的公共和集成測試支持
  • AssertJ:流式斷言庫
  • Hamcrest:匹配對象庫
  • Mockito:Java 模擬框架
  • JSONassert:JSON 斷言庫
  • JsonPath: JSON XPath

MockMvc概念

MockMvc是Spring Test模塊的一部分,它允許我們對Spring MVC控制器進行單元測試,而無需啟動完整的Spring應用上下文。

MockMvc可以模擬HTTP請求和響應,MockMvc就像是一個虛擬的Spring MVC,能夠讓我們快速測試控制器。

MockMVC的基本步驟

(1) mockMvc.perform執行一個請求。

(2) MockMvcRequestBuilders.get(“XXX”)構造一個請求。

(3) ResultActions.param添加請求傳值

(4) ResultActions.accept()設置返回類型

(5) ResultActions.andExpect添加執行完成后的斷言。

(6) ResultActions.andDo添加一個結果處理器,表示要對結果做點什么事情,比如處使用print()輸出整個響應結果信息。

(7) ResultActions.andReturn表示執行完成后返回相應的結果。

實例化

方法一:通過參數指定一組控制器,這樣就不需要從上下文獲取

mockMvC = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();

方法二:指定WebApplicationContext 將會從該上下文獲得相應的控制器并得到相應的MockMvc

mockMVC=MockMvcBuilders.webAppContextSetup(webApplicationContext).build();

步驟

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

1、雙擊選中你要測試的類,點擊 Navigate
在這里插入圖片描述
2、注意點擊 Test 的時候鼠標要放在對應的類上
在這里插入圖片描述
3、勾選你想要的
在這里插入圖片描述
這時候生成的代碼是這樣的

package com.zhangyu.controller;import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;class HelloWorldControllerTest {@BeforeEachvoid setUp() {}@AfterEachvoid tearDown() {}@Testvoid index() {}
}

根據上面的 MockMVC的基本步驟 我們編寫代碼

package com.zhangyu.controller;import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class HelloWorldControllerTest {private MockMvc mvc;@BeforeEachvoid setUp() throws Exception {mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();}@Testvoid index() throws Exception {mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();}
}

稍微解釋一下這個幾個新的注解:

  • @SpringBootTest:獲取啟動類,加載配置,尋找主配置啟動類(被 @SpringBootApplication 注解的)
  • @RunWith(SpringRunner.class):讓JUnit運行Spring的測試環境,獲得Spring環境的上下文的支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161069.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161069.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161069.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ElMessageBox中的子組件回調關閉函數

父組件中&#xff1a; const closeMessageBox () > {ElMessageBox.close();getList(); };const open () > {ElMessageBox({title: 添加商品,message: h(AddTaxExemption, { onClose: closeMessageBox }),customClass: custom-message-box, showConfirmButton: false,d…

各大電商平臺雙十一“狂飆”,如何選擇商城系統?

今年是“雙十一”的第十五年。作為各大平臺和品牌的全年最重要的營銷節點&#xff0c;品牌們可謂是來勢洶洶&#xff0c;各種促銷活動和優惠力度讓人眼花繚亂。 淘天數據顯示&#xff0c;天貓促銷活動開售當晚&#xff0c;155個品牌開賣成交額突破1億元&#xff1b;首小時內7.1…

str轉wstr的三種方法和從網站獲取json數據到數據隨機提取,返回拼接字符串和動態數組

庫的設置 hv庫 外部包含目錄&#xff1a;…\include\libhv_new\hv; 庫目錄&#xff1a;…\include\libhv_new\lib\x86\Release; 附加依賴項&#xff1a;hv.lib; //Get請求 獲取json數據&#xff0c;然后提取符合 條件的&#xff0c;time值大于自定義變量的值&#xff0c;然后取…

【UE】用樣條線實現測距功能(上)

目錄 效果 步驟 一、創建樣條網格體組件3D模型 二、實現點擊連線功能 三、實現顯示兩點間距離功能 效果 步驟 一、創建樣條網格體組件3D模型 創建一個圓柱模型&#xff0c;這里底面半徑設置為10mm&#xff0c;高度設置為1000mm 注意該模型的坐標軸在如下位置&#xff1…

基于pytest的服務端http請求的自動化測試框架?

1、引言 我有一個朋友是做 Python 自動化測試的。前幾天他告訴我去參加一個大廠面試被刷了。 我問他是有沒有總結被刷下來的原因。他說面試官問了一些 pytest 單元測試框架相關的知識&#xff0c;包括什么插件系統和用力篩選。但是他所在的公司用的技術是基于 unittest 的&am…

Sentinel與SpringBoot整合

好的&#xff0c;以下是一個簡單的Spring Cloud整合Sentinel的代碼示例&#xff1a; 首先&#xff0c;在pom.xml中添加以下依賴&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel&l…

swift-基礎

print區別 print(1,2,3, separator: "-", terminator: "\n")//表示用-來分割//1-2-3 //terminator表示用\n作為終止符 var a "a",b "b" print(a b) //ab print("\(a)前面是a變量\(b)后面是b變量")變量 var name "…

Win10系統無法登錄Xbox live的四種解決方法

在Win10系統中&#xff0c;用戶可以登錄Xbox live平臺&#xff0c;暢玩自己喜歡的游戲。但是&#xff0c;有用戶卻遇到了無法登錄Xbox live的問題。接下來小編給大家詳細介紹四種簡單的解決方法&#xff0c;解決后用戶在Win10電腦上就能成功登錄上Xbox live平臺。 Win10系統無法…

Linux編程 文件操作 creat open

文件描述符 文件描述符在形式上是一個非負整數。實際上&#xff0c;它是一個索引值&#xff0c;指向內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時&#xff0c;內核向進程返回一個文件描述符。 啟動一個進程之后&#xff0c;…

SquareCTF-2023 Web Writeups

官方wp&#xff1a;CTFtime.org / Square CTF 2023 tasks and writeups sandbox Description&#xff1a; I “made” “a” “python” “sandbox” “”“” nc 184.72.87.9 8008 先nc連上看看&#xff0c;只允許一個單詞&#xff0c;空格之后的直接無效了。 flag就在當…

(C)一些題2

1.在 C 語言中&#xff08;以 16位 PC 機為例&#xff09;,5種基本數據類型的存儲空間長度的順序為&#xff08;&#xff09; A . char < int < long int <float < double B . char int < long int<float <double C . char < int < long int …

inux應用開發基礎知識——串口應用編程(十一)

前言&#xff1a; 在Linux系統中&#xff0c;串口設備以文件的形式存在&#xff0c;通常位于/dev目錄下&#xff0c;如ttyS0、ttyUSB0等。這些設備文件可以用于讀取和寫入數據。要使用串口設備&#xff0c;需要打開相應的設備文件。在打開串口時&#xff0c;可以使用O_RDWR選項…

哈夫曼樹你需要了解一下

哈夫曼樹介紹哈夫曼數特點哈夫曼應用場景哈夫曼構建過程哈夫曼樹示例拓展 哈夫曼樹介紹 哈夫曼樹&#xff08;Huffman Tree&#xff09;是一種特殊的二叉樹&#xff0c;也被稱為最優二叉樹。在計算機科學中&#xff0c;它是由權值作為葉子節點構造出來的一種二叉樹。哈夫曼樹的…

05 取樣器(BeanShell和JSR223 Sampler)

一、取樣器作用 1、取樣器可以理解為Jmeter的橋梁&#xff0c;或者是Jmeter的加工廠&#xff1b; 2、Jmeter使用過程中&#xff0c;經常有些數據不能直接使用&#xff0c;需要加工后才能使用&#xff1b;這樣就用到了取樣器&#xff1b;但是這里存在問題&#xff0c;Jmeter中的…

Differences between package.json and pnpm-lock.yaml

1.pnpm-lock.yaml 是pnpm包管理工具生成的確保依賴包的版本在所有的環境里面都相同對依賴包的任何操作都會更新在該文件中&#xff0c;因此&#xff0c;需要確保提交到代碼倉庫中。包含了解析的依賴項和版本號。如下圖&#xff1a; 2.package.json 列出應用所需的依賴和元數…

批量修改文件名

原理&#xff1a; 利用 bat 的 REN 舊名字 新名字 命令 第一步&#xff1a; 【CtrlA】選中所有文件&#xff0c;按下【Shift】鍵右鍵任一文件夾彈出窗口選擇【復制為路徑】 第二步&#xff1a; 使用Excel技巧構造出 REN 舊名字 新名字 第三步&#xff1a; 用拼接好的命令…

【黑馬甄選離線數倉day01_項目介紹與環境準備】

1. 行業背景 1.1 電商發展歷史 電商1.0: 初創階段20世紀90年代&#xff0c;電商行業剛剛興起&#xff0c;主要以B2C模式為主&#xff0c;如亞馬遜、eBay等 ? 電商2.0: 發展階段21世紀初&#xff0c;電商行業進入了快速發展階段&#xff0c;出現了淘寶、京東等大型電商平臺&a…

(swjtu西南交大)數據庫實驗(數據庫需求分析):音樂軟件數據管理系統

實驗內容&#xff1a; 數據庫需求分析&#xff1a;各用戶組需求描述&#xff0c;繪出數據流圖&#xff08;詳細案例參見教材p333~p337&#xff0c;陶宏才&#xff0c;數據庫原理及設計&#xff0c;第三版&#xff09;&#xff1b; 一、選題背景 近年來&#xff0c;“聽歌”逐…

Ajax入門-Express框架介紹和基本使用

電腦實在忒垃圾了&#xff0c;出現問題耗費了至少一刻鐘time&#xff0c;然后才搞出來正常的效果&#xff1b; 效果鎮樓 另外重新安裝了VScode軟件&#xff0c;原來的老是報錯&#xff0c;bug。。&#xff1b; 2個必要的安裝命令&#xff1b; 然后建立必要的文件夾和文件&…

雷軍:我的程序人生路

今天有朋友發給我一篇我在20年前在BBS上寫的帖子。那還是1996年&#xff0c;我們通過電話線撥號連接到西點BBS上飆帖子玩的年代。那是一個互聯網混沌初開的年代&#xff0c;那是一個BBS和Email幾乎主宰了全部互聯網的年代&#xff0c;那是一個青春的理想和熱血沸騰的年代。 我…