【讲解下Spring Boot单元测试】

server/2024/9/18 20:46:08/ 标签: spring boot, 单元测试, log4j

在这里插入图片描述

🌈个人主页: 程序员不想敲代码啊
🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家
👍点赞⭐评论⭐收藏
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

在这里插入图片描述

🌠Spring Boot单元测试

🌠Spring Boot提供一个非常方便的方式来写单元测试,它利用了Spring Test中的功能,允许你很容易地测试Spring应用程序中的各个组件。

🌠首先,你需要为你的项目添加Spring Boot Starter Test依赖。对于Maven项目,你需要在pom.xml中添加以下依赖:

<dependencies><!-- 其它依赖... --><!-- Spring Boot Starter Test依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

🌠对于Gradle项目,你需要在build.gradle文件中添加以下依赖:

dependencies {// 其它依赖...// 测试依赖testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

🌠下面提供一个简单的单元测试示例,假设你有一个Spring Boot应用程序中的服务类,我们可以进行单元测试

@Service
public class CalculatorService {public int add(int a, int b) {return a + b;}
}

🌠对于上述的CalculatorService类,一个简单的单元测试会是这样的:

import static org.assertj.core.api.Assertions.assertThat;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;@SpringBootTest
public class CalculatorServiceTest {@Autowiredprivate CalculatorService calculatorService;@Testpublic void testAdd() {// Arrange (准备阶段)int numberA = 10;int numberB = 20;// Act (行动阶段)int result = calculatorService.add(numberA, numberB);// Assert (断言阶段)assertThat(result).isEqualTo(30);}
}

🌠在上述例子中,@SpringBootTest注解创建了一个应用程序上下文,这在进行集成测试时是有用的。但如果只是单纯的单元测试一个组件,并不需要完整的上下文,可以用@ExtendWith(SpringExtension.class)代替以提升测试速度。

🌠对于需要测试Spring MVC控制器的情况,你可以使用MockMvc来模拟HTTP请求和断言响应:

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;import org.junit.jupiter.api.BeforeEach;
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;@SpringBootTest
@AutoConfigureMockMvc
public class WebLayerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void shouldReturnDefaultMessage() throws Exception {this.mockMvc.perform(get("/")).andExpect(status().isOk()).andExpect(content().string("Hello World"));}
}

🌠在这个示例中,@AutoConfigureMockMvc@SpringBootTest被用来注入一个MockMvc实例,然后我们使用这个实例来执行一个HTTP GET请求,并断言结果。这种测试方式更接近于真实的HTTP请求,但它依然运行在服务器未启动的情况下。

🌠最后,正确的单元测试不应该依赖Spring框架或是任何外部服务/数据库等,这些是集成测试的范畴。对于单元测试,你应该尽可能地模拟你的依赖,使得每个测试小而快,并只关注一个特定的组件。


http://www.ppmy.cn/server/7903.html

相关文章

Apache Spark 文件拆分机制

目录 数据拆分的基本概念 文件拆分的过程 保证数据完整性的机制 总结 数据拆分的基本概念 Apache Spark 在处理大规模数据集时&#xff0c;会将数据分成多个小块&#xff0c;这些小块称为分区&#xff08;partitions&#xff09;。数据被分区的目的是为了并行处理&#xff…

【Xilinx】时序约束学习 TIMING-2: 基准时钟源管脚无效

在错误的管脚 <pin_name> 上创建了基准时钟 <clock_name>。建议仅在适当的时钟根&#xff08;不含时序弧的输入端口或原语输出管脚&#xff09; 上创建基准时钟。 描述 基准时钟必须在时钟树的源时钟上定义。例如&#xff0c; 源时钟可能是设计的输入端口。如果在…

目标检测网络YOLO进化之旅

yolo系列网络在目标检测领域取得了巨大的成功&#xff0c; 尤其是在工程实践中&#xff0c; 以其出色的性能优势获得了广泛的应用落地。 YOLO的前3个版本是由同一个作者团队出品&#xff0c; 算是官方版本。 之后的版本都是各个研究团队自己改进的版本&#xff0c; 之间并无明…

【python】Paste Mask

学习来自【OpenCv】利用roi 掩模 将一张图片添加到另一张上 任务描述&#xff1a;提取图片A的 mask 区域&#xff0c;并粘贴到图片B上 文章目录 1 代码实现2 结果展示3 涉及到的库cv2.bitwise_notcv2.bitwise_andcv2.add 附录——获取 mask 的边界框 1 代码实现 A 图 A 图的 …

力扣70:爬楼梯(经典动态规划)

题目 解题思路 考虑动态规划&#xff0c;dp[i]表示爬到第i层的方法种数&#xff0c;对于第i层&#xff0c;可以从第i-2层爬两个台阶到达&#xff0c;也可以从i-1层爬一个台阶到达&#xff0c;故dp[i]dp[i-1]dp[i-2]&#xff0c;输出dp[n]即为答案 代码 #include<iostream…

爬虫学习:毛毛组案例

pip install pip install requestspip install base64pip install pycrytodome URL 目标网站&#xff1a;https://www.maomaozu.com/#/build 工具网站&#xff1a;https://curlconverter.com/ 简便请求发送信息&#xff0c;使用方法不做过多说明 我使用 cURL (bash) import…

将记录从excel当中导出为.sql文件,再新增到数据库

一、背景 临时遇到了一个需求&#xff0c;比如根据人员的名字查询对应记录&#xff0c;看起来还是很简单的&#xff0c;直接用select查询就可以&#xff0c;然而如果此时存在以下情况&#xff1a; 数据库根本就没有人员信息表&#xff1b;------这个倒是好操作&#xff1b;现…

Docker搭建项目管理软件禅道

文章目录 一、简介二、部署三、使用 一、简介 禅道是以项目管理为核心的协作平台&#xff0c;旨在帮助团队高效地进行项目管理和协作。 禅道提供了项目管理、任务管理、团队协作、文档管理、报告统计等功能。 禅道官网 二、部署 操作系统&#xff1a;22.04.4 创建文件夹 …

上位机工作感想-从C#到Qt的转变-1

0.前言 接触Qt开发也有一年多的时间了&#xff0c;还记得去年初从杭州回合肥时&#xff0c;刚来公司面临的几个问题&#xff1a; 1.C#转上位机的迷茫2.新公司管理模式的差异3.试用期的各种紧急任务。 当时也是加班加点学习C和Qt的基础知识&#xff0c;做了两个考核项目后&am…

乒乓球运动员之间的“算”既包括计算也包括算计

在乒乓球运动员之间的交流和竞争中&#xff0c;"算"这个词有两个含义。 首先&#xff0c;"算"可以指计算&#xff0c;即运动员在比赛中对进攻、防守和战术做出准确的评估和判断&#xff0c;根据局势和对手的表现做出相应的调整和决策。这包括计算击球的角度…

【Linux】自定义协议——实现网络序列化和反序列化

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;承接上文内容【Linux】应用层协议序列化和反序列化 目录 &#x1f449;&#x1f3fb;代码实现如下Calculate.hp…

【LeetCode刷题记录】206. 反转链表

206 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例…

【Redis(7)】缓存技术的挑战及设计方案

缓存是计算机科学中用于提升系统性能的一种关键技术。在本文中&#xff0c;我们将针对缓存的基本概念、可能遇到的问题、优缺点、常见策略以及设计一个高可用、高性能、高并发缓存方案的思路进行探讨。 缓存是什么&#xff1f; 缓存是一种数据存储实践&#xff0c;它将频繁访问…

Spring Security之Session管理

前言 在聊认证过滤器的时候&#xff0c;我们埋了个坑&#xff1a;Session管理。实际上&#xff0c;事情从这里开始&#xff0c;就变得复杂了。提前跟大家交个底&#xff1a;后续我们将涉及多个需要协同才能完成的功能。 什么是Session 想要管理session&#xff0c;就必须搞清…

Arcgis 定义投影、投影变换、导出栅格为tif

目录 一、Arcgis 定义投影 1、定义投影 2、设置平移 二、投影变换 1、栅格数据的投影变换 2、矢量数据的投影变换

[Spring Cloud] (4)搭建Vue2与网关、微服务通信并配置跨域

文章目录 前言gatway网关跨域配置取消微服务跨域配置 创建vue2项目准备一个原始vue2项目安装vue-router创建路由vue.config.js配置修改App.vue修改 添加接口访问安装axios创建request.js创建index.js创建InfoApi.js main.jssecurityUtils.js 前端登录界面登录消息提示框 最终效…

使用飞桨快速部署stable diffusion模型

这可以说是最快的部署stable diffusion模型的方法了&#xff0c;而且星河社区还有免费的GPU算力提供&#xff0c;这样再也不用担心没有算力了&#xff01; 操作方法&#xff1a; # 安装相关库 pip install docarray0.21.0 pip install paddlehub# 初始化 from PIL import Imag…

解读神秘的华为昇腾910

硬件系列的第5篇了 上一篇Microsoft Maia (qq.com) 上上篇Google的TPU (qq.com) 上上上篇怎么看待Groq (qq.com) 上上上上篇

Go 之获取变量类型

Python 可以通过 type 快速获取变量类型。Ruby 也可以通过 class 方法快速获取变量类型。 lists [1, 2, 3, 4, 5] print(type(lists)) # <class list>lists [1, 2, 3, 4, 5] puts lists.class # Array 那么 Go 有哪些获取变量类型的方法呢&#xff1f; fmt.Printf(&…

使用easyexcel将csv转为excel

一.背景 供应商系统下载的csv文件不支持域控&#xff08;主要是第三方wps服务不能对csv文件加密&#xff0c;但是可以对office系列产品进行权限访问的加密控制&#xff09;。因此思路就改为现将csv文件转为excel文件&#xff0c;然后对excel文件进行加域控制。本文主要介绍如何…