【讲解下Spring Boot单元测试】

在这里插入图片描述

🌈个人主页: 程序员不想敲代码啊
🏆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.hqwc.cn/news/637752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能&#xff0c;该功能可以减少启动时间&#xff0c;但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档&#xff0c;则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

【LeetCode】187. 重复的DNA序列

题目链接&#xff1a;187. 重复的DNA序列 题目描述&#xff1a; 思路&#xff1a;首先要明白一个重要概念区别&#xff1a; 子串(substring): 原始字符串的一个连续子集。子序列&#xff08;subsequence): 原始字符串的一个子集。 再注意题意是&#xff1a;长度为10的子串出现…

强固型工业电脑在码头智能化,龙门吊/流机车载电脑的行业应用

码头智能化行业应用 对码头运营来说&#xff0c;如何优化集装箱从船上到码头堆场到出厂区的各个流程以及达到提高效率。 降低成本的目的&#xff0c;是码头营运获利最重要的议题。为了让集装箱码头客户能够安心使用TOS系统来调度指挥码头上各种吊车、叉车、拖车和人员&#xf…

安居水站:理解烟瘾、探索戒烟动因及采用有效策略

摘要&#xff1a;本论文旨在深入探讨烟瘾的成因&#xff0c;分析戒烟的动因和好处&#xff0c;并提出一套科学的戒烟方法和具体策略。通过综合权威机构的研究文献&#xff0c;我们将为公众提供更全面、更深入的理解&#xff0c;从而推动更多人走上戒烟的道路&#xff0c;改善个…

鸿蒙OpenHarmony【轻量系统编写“Hello World”程序】 (基于Hi3861开发板)

编写“Hello World”程序 下方将通过修改源码的方式展示如何编写简单程序&#xff0c;输出“Hello world”。请在下载的源码目录中进行下述操作。 前提条件 已参考鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到…

力扣283. 移动零

Problem: 283. 移动零 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义一个int类型变量index初始化为0&#xff1b; 2.遍历nums当当前的元素nums[i]不为0时使nums[i]赋值给nums[index]&#xff1b; 3.从index开始将nums中置对应位置的元素设为0&#xff1b; 复杂度 时间…

从零开始的vscode配置及安装rust教程

配置vscode的rust环境 下载安装vscodemac 环境1. 下载安装rust2. 配置 mac vscode环境3. 创建一个测试项目 windows 环境1. 安装c运行环境2. 安装配置rustup3. 配置windows vscode环境4. 创建一个测试项目 下载安装vscode 1.官网应用程序下载 vscode&#xff1a;https://code.v…

Dynamic Wallpaper for Mac激活版:视频动态壁纸软件

Dynamic Wallpaper for Mac 是一款为Mac电脑量身打造的视频动态壁纸应用&#xff0c;为您的桌面带来无限生机和创意。这款应用提供了丰富多样的视频壁纸选择&#xff0c;涵盖了自然风景、抽象艺术、科幻奇观等多种主题&#xff0c;让您的桌面成为一幅活生生的艺术画作。 Dynami…

51、图论-岛屿数量

思路&#xff1a; 该问题要求在一个由 1&#xff08;表示陆地&#xff09;和 0&#xff08;表示水&#xff09;组成的二维网格中&#xff0c;计算岛屿的数量。岛屿被水包围&#xff0c;并且通过水平或垂直连接相邻的陆地可以形成。这个问题的核心是识别并计数网格中相连的陆地…

数据结构之双链表的相关知识点及应用

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构 目录 双链表的实现 初始化双链表 在双链表中尾插数据 在双链表中尾删数据 在双链表中头插数据 在双链表中头删数据 在双…

使用Spring 完成转账业务添加日志功能

(完整的代码在文章附带文件中 , 文章里的代码仅作展示 , 可能有部分不完善 代码地址 :下载:https://javazhang.lanzn.com/i5oLI1vyiile 密码:1234 ) 任务目标 具体实现方法和心得 步骤1. 导入依赖项Spring依赖 , aop依赖,德鲁伊依赖,mybatis依赖 , mysql驱动 , mybatis-sprin…

解决“ImportError: DLL load failed while importing _rust: 找不到指定的程序的问题

运行 scrapy startproject wikiSpider 报错&#xff1a;ImportError: DLL load failed while importing _rust: 找不到指定的程序。 经过尝试 可以更换Python解释器版本来解决 1、点击crtlalts打开设置 点击项目>解释器 选择3.11解释器 &#xff08;我原来报错用的3.9的解…