当前位置: 首页 > news >正文

【Spring Boot】SpringBoot 单元测试

SpringBoot 单元测试

  • 一. 什么是单元测试
  • 二. 单元测试的好处
  • 三. Spring Boot 单元测试
    • 单元测试的实现步骤

一. 什么是单元测试

单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。

二. 单元测试的好处

1、可以⾮常简单、直观、快速的测试某⼀个功能是否正确。
2、使⽤单元测试可以帮我们在打包的时候,发现⼀些问题,因为在打包之前,所以的单元测试必须通过,否则不能打包成功。
3、使⽤单元测试,在测试功能的时候,可以不污染连接的数据库,也就是可以不对数据库进⾏任何改变的情况下测试功能。(需要 @Transactional 注解)

三. Spring Boot 单元测试

Spring Boot 项⽬创建时会默认单元测试框架 spring-boot-test,⽽这个单元测试框架主要是依靠另⼀个著名的测试框架 JUnit 实现的,打开 pom.xml 就可以看到:

在这里插入图片描述

单元测试的实现步骤

  1. ⽣成单元测试类

在要测试的类中右键 -> generate -> test
在这里插入图片描述

⽣成的代码:

class UserMapperTest {@Testvoid findUserByName() {}
}

这个时候,此⽅法是不能调⽤到任何单元测试的⽅法的,此类只⽣成了单元测试的框架类,具体的业务代码要自己填充。

注意: 生成的单元测试的类的位置放在 test 对应的目录下

  1. 添加单元测试代码

1.添加 Spring Boot 框架测试注解:@SpringBootTest

@SpringBootTest // 表明当前单元测试是在 Spring Boot 环境下的, 不加上这个注解的话, 无法注入要使用的类
class UserMapperTest {@Testvoid findUserByName() {}
}

2.添加单元测试业务逻辑


@SpringBootTest
class UserMapperTest {@Resourceprivate UserMapper userMapper;@Testvoid findUserByName() {User user = userMapper.findUserByName("zhaoliu");// 使⽤断⾔判断最终的结果是否符合预期Assertions.assertNotNull(user);}
}

如果想要不污染数据库的话可以在类上或者方法上加上 @Transactional 注解, 这样测试完会自动回滚.

	@Transactional@Testvoid findUserByName() {User user = userMapper.findUserByName("zhaoliu");// 使⽤断⾔判断最终的结果是否符合预期Assertions.assertNotNull(user);}

简单的断⾔说明:

方法说明
assertEquals判断两个对象或者原始类型是否相等
assertNotEquals判断两个对象或者原始类型是否不相等
assertSame判断两个对象引用是否指向同一个对象
assertNotSame判断两个对象引用是否指向不同对象
assertTrue判断给定的 布尔值是否为 true
assertFalse判断给定的 布尔值是否为 false
assertNull判断给定的对象引用是否为 null
assertNotNull判断给定的对象引用是否不为 null

好啦! 以上就是 SpringBoot 单元测试 的讲解,希望能帮到你 !
评论区欢迎指正 !

相关文章:

【Spring Boot】SpringBoot 单元测试

SpringBoot 单元测试 一. 什么是单元测试二. 单元测试的好处三. Spring Boot 单元测试单元测试的实现步骤 一. 什么是单元测试 单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。 二. 单元测试的好处…...

ansible 调研

参考:自动化运维工具——ansible详解(一) - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点&#xf…...

QT UI控件汇总介绍

按钮 ToolButton 和pushbutton没什么区别&#xff0c;可以用来设置图标 设置展示策略 RadioButton 一般用Container可以将其框起来设置互斥域&#xff0c;推荐选用GroupBox 使用方法 qDebug()<<ui->radioButton_3->isChecked(); CheckBox 可以勾选三态 stat…...

【垃圾回收概述及算法】

文章目录 1. 垃圾回收概述及算法2. 垃圾回收相关算法2.1 标记阶段&#xff1a;引用计数算法2.2 标记阶段&#xff1a;可达性分析算法2.3 对象的 finalization 机制2.3.1 一个对象是否可回收的判断 2.4 清除阶段&#xff1a;标记-清除算法2.5 清除阶段&#xff1a;复制算法2.6 清…...

2021年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 对于字典infor {“name”:“tom”, “age”:13, “sex”:“male”}&#xff0c;删除"age":13键值对的操作正确的…...

为什么通过一致性正则化方法就可以避免将所有未标记数据集分配给同一类?

一致性正则化方法可以帮助避免将所有未标记数据分配给同一类别的原因在于它们引入了对模型输出的一致性约束&#xff0c;从而减轻了判别性损失&#xff08;如交叉熵损失&#xff09;可能导致的问题。以下是一些关键原因&#xff1a; 一致性反馈&#xff1a; 一致性正则化方法…...

第4章 决策树

文章目录 4.1 基本流程4.2 划分选择4.2.1 信息增益4.2.2 增益率4.2.3 基尼指数 4.3 剪枝处理4.3.1 预剪枝4.3.2 后剪枝 4.4 连续与缺失值4.4.1 连续值处理4.4.2 缺失值处理 4.5 多变量决策树4.6 阅读材料 4.1 基本流程 决策树也称判定树&#xff0c;是一类常见的机器学习方法。…...

在Remix中编写你的第一份智能合约

智能合约简单来讲就是&#xff1a;部署在去中心化区块链上的一个合约或者一组指令&#xff0c;当这个合约或者这组指令被部署以后&#xff0c;它就不能被改变了&#xff0c;并会自动执行&#xff0c;每个人都可以看到合约里面的条款。更深层次的理解就是&#xff1a;这些代码会…...

如何查看dll文件内导出函数名称

一 使用VS自带工具 进入VS开发环境&#xff0c;然后Tools -> Visual studio 2017 Command Prompt&#xff0c;打开兼容工具命令提示符&#xff0c; 如果工具 目录下没有命令行提示&#xff0c;可以从开始菜单找到VS的命令行提示符。 cd到dll所在目录&#xff0c;输入命令…...

学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础

目录 1.串口通信的基础知识串口通信(Serial Communication)同步/异步&#xff1f;全双工&#xff1f;常见的串口软件的参数 2.STC32的串口通信实现原理引脚选择&#xff1a;实现分时复用模式选择串口1模式1&#xff0c;模式1波特率计算公式 3.串口通信代码实现编写串口1通信程序…...

JAVA String 和 String[][]互转的两种方法

第一种方法&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.40</version> </dependency>字符串转数组&#xff1a; String s "[[22,23,23],[1,10,20]]"…...

推荐几个制作svg的工具

以下是一些用于制作SVG&#xff08;可缩放矢量图形&#xff09;的工具和软件&#xff0c;适用于不同技能级别和需求&#xff1a; Adobe Illustrator&#xff1a;作为业界标准之一&#xff0c;Adobe Illustrator是功能强大的矢量图形编辑软件&#xff0c;适用于专业设计师和创意…...

Java实现防重复提交,使用自定义注解的方式

目录 1.背景 2.思路 3.实现 创建自定义注解 编写拦截器 4.使用 5.验证...

Springboot实现Web组件注册

一、前言 在实际开发中&#xff0c;有时候我们可能使用springboot注册web组件&#xff0c;实现某些功能&#xff0c;比如我们需要生成一些api来提供对外的服务&#xff0c;而对应的路径其实是不固定的&#xff0c;那么这种情况下&#xff0c;其实是可以通过这种方式来注册web组…...

Element组件案例 Vue路由 前端打包部署步骤

目录 Element组件案例案例需求与分析环境搭建整体布局顶部标题左侧导航栏核心-右侧导航栏表格编写表单编写分页工具栏编写 异步数据加载异步加载数据性别展示修复图片展示修复 Vue路由Vue路由简介Vue路由入门 打包部署前端工程打包部署前端工程nginx介绍部署 Element组件案例 …...

mysql5.7停止维护时间

mysql5.7将于2023年10月停止官网支持和更新&#xff1b;老项目要准备升级&#xff0c;新项目的mysql必须是mysql8.0&#xff08;2023-10&#xff09; 官方升级咨询地址 oracle官方升级咨询地址https://go.oracle.com/LP116153?elq_mid247718&sh1518132002061316121320310…...

解密.kat6.l6st6r勒索病毒:保护数据的关键方法

导言&#xff1a; 网络威胁如雨后春笋&#xff0c;而 .kat6.l6st6r 勒索病毒则是其中一个异常狡猾的恶棍。本文91数据恢复将深入探讨 .kat6.l6st6r 勒索病毒的特点、数据恢复方法以及如何有效地预防这一数字威胁。 数据的重要性不容小觑&#xff0c;您可添加我们的技术服务号&a…...

Godot 添加信号

前言 Godot 里面C#和GDScirpt 的用法完全不一样&#xff0c;网上相关资料太少了。 什么是信号 信号分为信号源&#xff0c;触发&#xff0c;目的节点。信号源在某些条件下触发信号&#xff0c;比如按钮点击&#xff0c;鼠标悬停等事件 #mermaid-svg-wyr9ARVcBFmUUu8y {font-…...

JS如何判断文字是否溢出(被ellipsis)?

如果想要文本超出宽度后用省略号省略&#xff0c;只需要加上以下的css就行了。 .ellipsis {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }3行css搞定&#xff0c;但是问题来了&#xff1a;如果我们想要当文本被省略的时候&#xff0c;也就是当文本超出指定…...

pb:常用函数和语句清单

pb:常用函数和语句清单 PB中提供了600多个函数,这还没有将B/S开发、数据窗口对象中的函数计算在内。但是,只要掌握、熟练运用、真正理解下面的这些函数(包括部分语句)就可以开发软件项目了。这些函数和语句是我给学员讲课时开发的一个完整的管理系统(提供了MIS必须的完整模…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...