Spring Boot 单元测试 0基础教程

咱们以一种通俗易懂的方式,通过一个简单的实例来教你怎么在Spring Boot项目中进行单元测试。

假设你有一个简单的Spring Boot应用,里面有一个UserService接口,以及它的实现类 UserServiceImpl,这个服务有一个方法用来获取用户的问候语。

// UserService.java
public interface UserService {String sayHelloTo(String name);
}// UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {@Overridepublic String sayHelloTo(String name) {return "Hello, " + name + "!";}
}

为了对该方法进行单元测试,我们可以创建一个对应的测试类。首先,确保你的项目包含了Spring Boot Test的依赖项,通常在build.gradle或pom.xml里添加如下依赖:

// Maven构建脚本(pom.xml)
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

然后,创建一个名为UserServiceTest的测试类:

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;@SpringBootTest(classes = YourApplication.class)
public class UserServiceTest {@Autowiredprivate UserService userService; // 被测试的真实服务对象注入@MockBeanprivate UserService mockUserService; // 创建模拟的服务对象,用于某些特定场景@Testpublic void testSayHelloTo() {// 对真实服务对象的测试String result = userService.sayHelloTo("Spring Boot");assertEquals("Hello, Spring Boot!", result);// 对模拟服务对象的测试(可选,用于模拟复杂依赖场景)Mockito.when(mockUserService.sayHelloTo(Mockito.anyString())).thenReturn("Hi there!");String mockedResult = mockUserService.sayHelloTo("Unit Tester");assertEquals("Hi there!", mockedResult);}
}

@SpringBootTest注解告诉Spring Boot要启动一个微型应用上下文来进行测试,其中包含你的主类YourApplication。

• @Autowired注解用于将真实的UserService实例注入到测试类中,这样可以直接测试真实的服务实现。

• @MockBean则创建了一个模拟的UserService对象,当我们的服务有很多依赖项,而又不想真正调用那些依赖时,可以使用模拟对象替代。

• @Test注解标记了一个测试方法,这里我们测试了sayHelloTo方法,使用assertEquals方法来验证实际结果是否与预期相符。

通过这个基础的例子,你应该对外如何在Spring Boot应用中编写单元测试有了初步的认识。实际工作中,单元测试还会涉及到数据库操作、REST API接口调用等各种更复杂的场景,但基本原则都是:为被测试代码设置合理的输入,调用方法,然后验证输出是否符合预期。

你学废了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777908.shtml

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

相关文章

数据库原理与应用(SQL Server)笔记 关系数据库

目录 一、关系数据库的基本概念&#xff08;一&#xff09;关系数据库的定义&#xff08;二&#xff09;基本表、视图&#xff08;三&#xff09;元组、属性、域&#xff08;四&#xff09;候选码、主码、外码 二、关系模型三、关系的完整性&#xff08;一&#xff09;实体完整…

010——服务器开发环境搭建及开发方法(下)

目录 三、 第一个驱动程序 四、 buildroot 4.1 制作根文件系统 4.2 buildroot使用 五、 uboot 009——服务器开发环境搭建及开发方法&#xff08;上&#xff09;-CSDN博客 三、 第一个驱动程序 # 1. 使用不同的开发板内核时, 一定要修改KERN_DIR # 2. KERN_DIR中的内核要…

机器学习和神经网络9

通过前几次学习,相信对机器学习和神经网络已经有了较为深入的了解。 让我们从一些经典的机器学习算法和实际代码示例开始。: 线性回归:用于预测连续输出的基本算法。你可以从这里找到详细的原理和代码示例。 K-近邻算法 (k-Nearest Neighbors, kNN):一种简单但有效的分类和…

百度智能云推出AI大模型全家桶;抖音发布 AI 生成虚拟人物治理公告

百度智能云推出大模型全家桶 百度智能云昨日在北京首钢园召开「Al Cloud Day: 大模型应用产品发布会」&#xff0c;此次发布会上&#xff0c;百度智能云宣布对以下 7 款产品进行升级。 数字人平台百度智能云曦灵智能客服平台百度智能云客悦内容创作平台「一念」知识智平台「甄…

npm淘宝镜像源切换

查询 npm config get registry注意因为淘宝的镜像域名更换&#xff0c;https://registry.npm.taobao.org域名HTTPS证书到期更换为https://registry.npmmirror.com/ 切换 npm config set registry https://registry.npmmirror.com/

ubuntu16 apt安装程序锁死解决

目录 1.使用apt install安装程序有时会爆出dpkg/lock类故障 2.使用lsof命令查看占用锁的进程 3.使用kill -9命令删除占用进程 4.删除锁 5. 配置生效 1.使用apt install安装程序有时会爆出dpkg/lock类故障 E: Could not get lock /var/lib/dpkg/lock - open (11: Resource …

【计算机网络】第 11、12 问:流量控制和可靠传输机制有哪些?

目录 正文流量控制的基本方法停止-等待流量控制基本原理滑动窗口流量控制基本原理 可靠传输机制1. 停止-等待协议2. 后退 N 帧协议&#xff08;GBN&#xff09;3. 选择重传协议&#xff08;SR&#xff09; 正文 流量控制涉及对链路上的帧的发送速率的控制&#xff0c;以使接收…

机器学习和神经网络0

神经网络及其在人工智能领域的应用 神经网络是一种模仿人脑神经元网络结构和功能的计算模型&#xff0c;它能够通过学习和识别数据模式来执行各种复杂任务。自20世纪40年代首次提出以来&#xff0c;神经网络已经在机器学习和人工智能领域取得了显著的进展。本文将探讨神经网络…

设计模式学习笔记 - 设计模式与范式 -结构型:5.门面模式:兼顾接口的通用性和易用性

概述 前面我们学习了代理模式、桥接模式、装饰器模式、适配器模式&#xff0c;本章再来学习一个新的结构性模式&#xff1a;门面模式。门面模式原理和实现都特别简单&#xff0c;应用场景也比较明确&#xff0c;主要在接口设计方面使用。 不知道你有没有遇到关于接口粒度的问…

HTTP

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

区块链dapp开发 dapp系统开发方案

在区块链技术的兴起和普及的推动下&#xff0c;去中心化应用程序&#xff08;DApp&#xff09;成为了当前数字世界中的热门话题之一。DApp 的开发不仅需要考虑技术方面的挑战&#xff0c;还需要深入了解区块链的工作原理和应用场景。本文将介绍一种 DApp 系统开发的基本方案&am…

CSS实现小车旅行动画实现

小车旅行动画实现 效果展示 CSS 知识点 灵活使用 background 属性下的 repeating-linear-gradient 实现路面效果灵活运用 animation 属性与 transform 实现小车和其他元素的动画效果 动画场景分析 从效果图可以看出需要实现此动画的话&#xff0c;需要position属性控制元素…

旧电脑安装个Win11玩玩,看看体验如何!

前言 小伙伴们都很清楚&#xff0c;Windows11的配置要求其实并不是很高&#xff0c;但要求的受信任平台模块&#xff08;TPM&#xff09;版本要求2.0 由于受信任平台模块的限制&#xff0c;导致许多电脑都没办法安装Windows11&#xff0c;如果要安装Windows11的旧机器也只能绕…

【QT+QGIS跨平台编译】040:【geos_c+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、geos_c介绍二、文件下载三、文件分析四、pro文件五、编译实践一、geos_c介绍 GEOS_C(GEOS C++接口)是GEOS库的C语言版本,它提供了一套丰富的API,允许开发者在C++程序中执行复杂的几何形状处理和空间关系分析。GEOS_C是基于JTS(Java Topolog…

怎么判断k8s的master是否支持调度运行pod服务

要查看 Kubernetes 中的污点&#xff08;Taint&#xff09;配置&#xff0c;您可以使用以下命令&#xff1a; kubectl describe node <节点名称> 这将显示有关节点的详细信息&#xff0c;其中包括节点上设置的污点。您还可以使用以下命令来获取节点的污点信息&#xff1a…

ADB的主要操作命令及详解

ADB&#xff0c;全称Android Debug Bridge&#xff0c;即安卓调试桥&#xff0c;是一个通用的命令行工具&#xff0c;其允许你与模拟器实例或连接的安卓设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试应用&#xff0c;并提供对Unix shell&#xff08;可用来…

步态采集平台

&#x1f349;步骤一、读取视频每一帧图像 &#x1f349;步骤二、对读取的图像进行分割&#xff0c;得到全景下的步态轮廓图。 ​​​​​​​&#x1f349;步骤三、对读取的图像进行裁剪得到归一化的步态轮廓图。 ​​​​​​​&#x1f349;步骤四、保存这一帧步态轮廓图

新网站收录时间是多久,新建网站多久被百度收录

对于新建的网站而言&#xff0c;被搜索引擎收录是非常重要的一步&#xff0c;它标志着网站的正式上线和对外开放。然而&#xff0c;新网站被搜索引擎收录需要一定的时间&#xff0c;而且时间长短受多种因素影响。本文将探讨新网站收录需要多长时间&#xff0c;以及新建网站多久…

SnapGene 5 for Mac 分子生物学软件

SnapGene 5 for Mac是一款专为Mac操作系统设计的分子生物学软件&#xff0c;以其强大的功能和用户友好的界面&#xff0c;为科研人员提供了高效、便捷的基因克隆和分子实验设计体验。 软件下载&#xff1a;SnapGene 5 for Mac v5.3.1中文激活版 这款软件支持DNA构建和克隆设计&…

网络:udptcp套接字

目录 协议 网络传输基本流程 网络编程套接字 udp套接字编程 udp相关代码实现 sock函数 bind函数 recvfrom函数 sendto函数 udp执行指令代码 popen函数 udp多线程版收发消息 tcp套接字编程 tcp套接字代码 listen函数 accept函数 read/write函数 connect函数 recv/…