在 Spring 中編寫單元測試

單元測試是軟件開發過程中不可或缺的一部分,它能有效地提高代碼質量,確保代碼功能的正確性。在 Spring 應用中,JUnit 和 Mockito 是常用的單元測試工具,而 Spring Test 提供了豐富的測試支持。本文將介紹如何在 Spring 中使用 JUnit、Mockito 和 Spring Test 進行單元測試。

1. 引入必要的依賴

首先,在 pom.xml 文件中添加 JUnit、Mockito 和 Spring Test 的依賴:

<dependencies><!-- JUnit 5 依賴 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.8.1</version><scope>test</scope></dependency><!-- Mockito 依賴 --><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>4.0.0</version><scope>test</scope></dependency><!-- Spring Test 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.5.6</version><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency>
</dependencies>

2. 使用 JUnit 編寫單元測試

JUnit 是最流行的 Java 單元測試框架。我們將使用 JUnit 5 編寫一個簡單的單元測試。

假設我們有一個 CalculatorService 類:

public class CalculatorService {public int add(int a, int b) {return a + b;}public int subtract(int a, int b) {return a - b;}
}

我們可以為其編寫如下測試類:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;public class CalculatorServiceTest {private final CalculatorService calculatorService = new CalculatorService();@Testpublic void testAdd() {assertEquals(5, calculatorService.add(2, 3));}@Testpublic void testSubtract() {assertEquals(1, calculatorService.subtract(3, 2));}
}

3. 使用 Mockito 進行單元測試

Mockito 是一個用于創建模擬對象的流行框架,特別適用于測試依賴注入的類。假設我們有以下 UserService 類和 UserRepository 接口:

public interface UserRepository {User findByUsername(String username);
}public class UserService {private UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;}public User getUserByUsername(String username) {return userRepository.findByUsername(username);}
}

我們可以使用 Mockito 為 UserService 編寫單元測試:

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;public class UserServiceTest {private UserRepository userRepository;private UserService userService;@BeforeEachpublic void setUp() {userRepository = Mockito.mock(UserRepository.class);userService = new UserService(userRepository);}@Testpublic void testGetUserByUsername() {User user = new User("john_doe");when(userRepository.findByUsername("john_doe")).thenReturn(user);User result = userService.getUserByUsername("john_doe");assertEquals("john_doe", result.getUsername());}
}

4. 使用 Spring Test 進行單元測試

Spring Test 提供了對 Spring 應用的全面測試支持。通過 @SpringBootTest 注解,可以加載整個 Spring 應用的上下文進行集成測試。

假設我們有一個簡單的 Spring Boot 應用,包括 UserControllerUserService

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/user")public User getUser(@RequestParam String username) {return userService.getUserByUsername(username);}
}

我們可以使用 Spring Test 編寫如下測試類:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testGetUser() throws Exception {mockMvc.perform(MockMvcRequestBuilders.get("/user").param("username", "john_doe")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.jsonPath("$.username").value("john_doe"));}
}

結論

通過本文的介紹,我們了解了如何在 Spring 應用中使用 JUnit、Mockito 和 Spring Test 進行單元測試。JUnit 提供了基礎的測試框架,Mockito 允許我們方便地創建模擬對象,而 Spring Test 則提供了對 Spring 應用的全面測試支持。

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

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

相關文章

并行處理百萬個文件的解析和追加

處理和解析大量文件&#xff0c;尤其是百萬級別的文件&#xff0c;是一個復雜且資源密集的任務。為實現高效并行處理&#xff0c;可以使用Python中的多種并行和并發編程工具&#xff0c;比如multiprocessing、concurrent.futures模塊以及分布式計算框架如Dask和Apache Spark。這…

物聯網時代5G通信技術分析研究一、引言

一、引言 近幾年&#xff0c;移動網絡技術跟隨互聯網的不斷發展而改革和進步&#xff0c;給平民大眾的生活也帶來新的嘗試與影響。從2G網絡的出現&#xff0c;到逐步被社會民眾所了解的3G&#xff0c;再到被熟知的且正在服務于大家的4G網絡&#xff0c;移動網絡技術的發展速度令…

jQuery Mobile 安裝指南

jQuery Mobile 安裝指南 jQuery Mobile 是一個基于 jQuery 的移動設備友好的網頁開發框架,它允許開發者創建響應式網頁和應用程序。本指南將詳細介紹如何安裝 jQuery Mobile,并確保您的開發環境準備好進行移動網頁開發。 1. 環境準備 在開始安裝 jQuery Mobile 之前,請確…

Mysql系列-Binlog主從同步

原文鏈接&#xff1a;https://zhuanlan.zhihu.com/p/669450627 一、主從同步概述 mysql主從同步&#xff0c;即MySQL Replication,可以實現將數據從一臺數據庫服務器同步到多臺數據庫服務器。MySQL數據庫自帶主 從同步功能&#xff0c;經過配置&#xff0c;可以實現基于庫、表…

B端設計:任何不顧及用戶體驗的設計,都是在裝樣子,花架子

B端設計是指面向企業客戶的設計&#xff0c;通常涉及產品、服務或系統的界面和功能設計。與C端設計不同&#xff0c;B端設計更注重實用性和專業性&#xff0c;因為它直接影響企業的效率和利益。 在B端設計中&#xff0c;用戶體驗同樣至關重要。不顧及用戶體驗的設計只是空洞的表…

數據庫之索引(二)

目錄 一、如何判斷數據庫的索引是否生效 二、如何評估索引創建的是否合理 三、索引是否越多越好 四、如何處理數據庫索引失效 五、是否所有的字段都適合創建索引 一、如何判斷數據庫的索引是否生效 可以使用EXPLAIN語句查看索引是否正在使用。 例如&#xff0c;假設已經創…

70.Bug:使用list.sort(Comparator.Comping(User::getCreateTime).reverse())空指針異常

1.出錯原因&#xff1a;在xml中沒有做字段映射 報錯語句復現&#xff1a; List<User> listnew ArrayList<>()&#xff1b; xml中進行查詢數據&#xff0c;數據存放在list中........... //排序 list.sort(Comparator.Comping(User::getCreateTime).reverse())&…

經典的layui框架,還有人用嗎?令人惋惜。

自從layui官網宣布關閉之后&#xff0c;layui框架的用戶飛速下滑&#xff0c;以至于到現在貝格前端工場承接的項目中&#xff0c;鮮有要求使用layui框架的&#xff0c;那么個框架還有人用嗎&#xff1f; 一、layui沒落是不是jquery惹的禍 layui的沒落與jQuery無關。layui框架…

Hi3861 OpenHarmony嵌入式應用入門--UDP Server

本篇使用的是lwip編寫udp服務端。需要提前準備好一個PARAM_HOTSPOT_SSID宏定義的熱點&#xff0c;并且密碼為PARAM_HOTSPOT_PSK。 修改網絡參數 在Hi3861開發板上運行上述四個測試程序之前&#xff0c;需要根據你的無線路由、Linux系統IP修改 net_params.h文件的相關代碼&…

深入理解 Docker 容器技術

一、引言 在當今的云計算和軟件開發領域&#xff0c;Docker 容器技術已經成為了一項不可或缺的工具。它極大地改變了應用程序的部署和運行方式&#xff0c;為開發者和運維人員帶來了諸多便利。 二、Docker 容器是什么&#xff1f; Docker 容器是一種輕量級、可移植、自包含的…

起底:Three.js和Cesium.js,二者異同點,好比全科和專科.

Three.js和Cesium.js是兩個常用的webGL引擎&#xff0c;很多小伙伴容易把它們搞混淆了&#xff0c;今天威斯數據來詳細介紹一下&#xff0c;他們的起源、不同點和共同點&#xff0c;閱讀后你就發現二者就像全科醫院和專科醫院的關系&#xff0c;很好識別。 一、二者的起源 Th…

性能測試相關理解---性能測試流程(二)

六、性能測試流程&#xff08;如何做性能測試&#xff1f;) 根據學習全棧測試博主的課程做的筆記 1、前期準備– 項目初期就開始&#xff0c;業務需求評審時盡量參與,對業務更深刻的認識&#xff08;確定哪些是核心業務、哪些可能存在并發請求、確定什么地方會出現瓶頸,方便后…

WebOffice在線編微軟Offfice,并以二進制流的形式打開Word文檔

在日常辦公場景中&#xff0c;我們經常會遇到這種場景&#xff1a;我們的合同管理系統的各種Word,excel,ppt數據都是以二進制數組的形式存儲在數據庫中&#xff0c;如何從數據庫中讀取二進制數據&#xff0c;以二進制數據作為參數&#xff0c;然后加載到瀏覽器的Office窗口&…

【無標題】地平線2西之絕境/Horizon Forbidden West? Complete Edition(更新:V1.3.57)

游戲介紹 與埃洛伊同行&#xff0c;在危險壯美的邊疆之地揭開種種未知的神秘威脅。此完整版可完整享受廣受好評的《地平線 西之絕境?》內容和額外內容&#xff0c;包括在主線游戲后展開的后續故事“炙炎海岸”。 重返《地平線》中遙遠未來的后末日世界&#xff0c;探索遠方的土…

Twitter群發消息API接口的功能?如何配置?

Twitter群發消息API接口怎么申請&#xff1f;如何使用API接口&#xff1f; 為了方便企業和開發者有效地與用戶互動&#xff0c;Twitter提供了各種API接口&#xff0c;其中Twitter群發消息API接口尤為重要。AokSend將詳細介紹Twitter群發消息API接口的功能及其應用場景。 Twit…

html+css+js貪吃蛇游戲

貪吃蛇游戲&#x1f579;四個按鈕控制方向&#x1f3ae; 源代碼在圖片后面 點贊??關注&#x1f64f;收藏?? 互粉必回&#x1f64f;&#x1f64f;&#x1f60d;&#x1f60d;&#x1f60d; 源代碼&#x1f4df; <!DOCTYPE html> <html lang"en"&…

15jQuery引入

【一】什么是jQuery jQuery是一個輕量級的、兼容多瀏覽器的JavaScript庫。jQuery內部封裝了原生的js代碼&#xff0c;提高編寫效率 【二】jQuery引入配置 1.● 代碼復制下來放到自己建的txt中&#xff0c;然后把他移入pycharm項目中重構成js文件(注意&#xff1a;只能在當前…

win10使用小技巧三

1. 添加照片查看器支持 目的&#xff1a;為Windows 10添加對特定圖片格式&#xff08;如JPG&#xff09;的支持&#xff0c;使用Windows照片查看器。步驟&#xff1a; 使用WinR打開運行窗口。輸入regedit&#xff0c;點擊確定進入注冊表編輯器。導航至HKEY_CURRENT_MACHINE\SO…

tomcat原理、結構、設計模式

1 what 一種web服務器&#xff0c;運行java servlet、jsp技術&#xff0c;能為java web提供運行環境并通過http協議處理客戶端請求。即tomcat http服務器 servlet容器。同類產品有jetty Web應用&#xff1a;Web應用是指通過Web瀏覽器訪問的應用程序&#xff0c;它使用Web技術…

平臺穩定性里程碑 | Android 15 Beta 3 已發布

作者 / 產品管理副總裁、Android 開發者 Matthew McCullough 從近期發布的 Beta 3 開始&#xff0c;Android 15 達成了平臺穩定性里程碑版本&#xff0c;這意味著開發者 API 和所有面向應用的行為都已是最終版本&#xff0c;您可以查閱它們并將其集成到您的應用中&#xff0c;并…