Spring Boot实用技巧之单元测试

news2024/10/7 7:31:12

文章目录

  • 一、单元测试的概念
  • 二、单元测试的优势
  • 三、Spring Boot实现单元测试
    • (一)添加依赖
    • (二)生成单元测试的类
    • (三) 添加注解和业务代码
      • 1. 添加 @SpringBootTest 注解
      • 2. 添加单元测试的业务代码
      • 3. 执行测试
    • (四)断言说明与添加
  • 四、sql 执行回滚设置

一、单元测试的概念

  百度百科:单元测试(unit testing)是指对软件中的最⼩可测试单元进⾏检查和验证的过程
  最小可测试单元因人而异,有的人认为是方法,有的人认为是类,作者更偏向于方法的说法
  执行单元测试的目的是检测开发者编写的⼀⼩段代码(或功能)是否正确。如果测试结果符合我们的预期,称之为测试通过,否则就是测试未通过(或者叫测试失败),最后我们根据测试结果来找错排错

二、单元测试的优势

  1. 非常简单、快速、直观的测试某一个功能是否符合预期
  2. 单元测试时可以不启动tomcat
  3. 在我们打包之前,所有的单元测试都会被执行一遍,一旦有一个单元测试没通过,都会打包失败
  4. 使用单元测试时,可以不污染数据库,也就是说可以在不对数据库进行任何修改的情况下,对 Mapper 层的代码进行测试,技术支持:回滚

三、Spring Boot实现单元测试

(一)添加依赖

  Spring Boot 项目创建时会默认添加上单元测试框架 spring-boot-starter-test,这个框架主要是依赖另一个著名测试框架 JUnit 实现的,如下图所示
测试框架依赖
  我们通过查看 spring-boot-starter-test 的源码,就能看到它和 JUnit 的关系
测试框架原理

(二)生成单元测试的类

  1. 在需要进行单元测试的类或接口里面设置
    创建单元测试类
    选择test
    单元测试类的生成

  2. 上述生成的单元测试类其中的方法中是没有内容的;其次生成的单元测试类位于test包下,如图:
    单元测试类的位置

(三) 添加注解和业务代码

1. 添加 @SpringBootTest 注解

// 表明当前单元测试运行在 spring boot 环境中
@SpringBootTest
class UserMapperTest {

    @Test
    void getUserById() {
    }
}

2. 添加单元测试的业务代码

// 表明当前单元测试运行在 spring boot 环境中
@SpringBootTest
class UserMapperTest {

    // 如果idea是科学版,那么这里注入的注解使用 @Autowired 可能会报错
    // 将 UserMapper 注入进来,对它的相关方法进行测试
    @Resource
    private UserMapper userMapper;

    // 测试代码
    @Test
    void getUserById() {
        UserInfo userInfo = userMapper.getUserById(1);
        System.out.println(userInfo);
    }
}

3. 执行测试

  1. 开始执行
    执行测试代码

  2. 运行结果
    测试结果

(四)断言说明与添加

  百度百科:断言(assertion)是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息
  断言所使用的类是 Assertions,如果断言失败,则后面的代码都不会执行

  1. 常用的断言方法
方法说明
assertEquals判断两个对象或两个基本类型是否相等
assertNotEquals判断两个对象或两个基本类型是否不相等
assertSame判断两个对象引用是否指向同一对象
assertNotSame判断两个对象引用是否指向不同对象
assertTrue判断给定的布尔值是否为true
assertFalse判断给定的布尔值是否为false
assertNull判断给定的对象引用是否为null
assertNotNull判断给定的对象引用是否不为null
  1. 使用断言对测试结果进行判断
    代码示例:
// 测试代码
@Test
void getUserById() {
    UserInfo userInfo = userMapper.getUserById(1);
    // System.out.println(userInfo);
    // 测试查询结果是否不为 null
    Assertions.assertNotNull(userInfo);
}

执行结果:
断言测试结果
如果方法写成 assertNull,那么结果就会报错:
错误的断言结果

四、sql 执行回滚设置

  很多时候,我们只是想进行测试,但是不愿意数据库中的数据也被修改,才是我们就要设置单元测试的回滚操作
  核心:给测试类或测试类的方法上加上 @Transactional 注解,该注解的本意只是开启事务,并提交事务,但是加在测试类的时候,它又增加了一个功能,就是最后执行完毕之后回滚事务

代码示例:

@Test
@Transactional
void updateNameById() {
    int result = userMapper.updateNameById(2, "wangwu");
    Assertions.assertEquals(1, result);
}

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

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

相关文章

MySQL部分常用函数总结

数值计算函数 使用方法: ABS(x) date函数 获取date中对应部分: YEAR(date) 字符串函数 用法举例: 左侧截取字符 SELECT LEFT(‘MySQL’,2); 按符号拆分字符,返回拆分后的部分 SUBSTRING_INDEX(profile,“…

创新洞察 |与众不同的DTC模式:2023年发展趋势将如何影响零售业增长策略?

DTC零售不再局限于数字原生品牌。传统零售商也在采用相同的策略,特别是在后疫情世界中竞争时。预计DTC销售将继续增长,因为更多品牌转向电子商务领域,而已建立的DTC参与者也在扩大其现有市场。预计仅在美国,数字原生品牌将在2023年…

多分类的ROC曲线绘制思路

目录 一、什么是ROC曲线 二、AUC面积 三、代码示例 1、二分类问题 2、多分类问题 一、什么是ROC曲线 我们通常说的ROC曲线的中文全称叫做接收者操作特征曲线(receiver operating characteristic curve),也被称为感受性曲线。 该曲线有两…

第四节 Linux 特殊权限SUID、SGID、SBIT

目录 1.Set UID 简称 SUID 2.Set GID 简称 SGID 3.Sticky Bit 简称 SBIT 1.Set UID 简称 SUID 简称 SUID 限制与功能: SUID权限仅对二进制程序有效; 执行者对于该程序需要具有x的执行权限; 本权限仅在执行该程序的过程中有效&#xff1…

Softmax简介

Softmax是一种数学函数,通常用于将一组任意实数转换为表示概率分布的实数。其本质上是一种归一化函数,可以将一组任意的实数值转化为在[0, 1]之间的概率值,因为softmax将它们转换为0到1之间的值,所以它们可以被解释为概率。如果其…

VSCode +gdb+gdbserver远程调试arm开发板

一、下载编译器 从ARM官网下载gcc-arm编译器,编译器中自带gdb和gdbserver,可以省去自己编译。 注:gdb是电脑端程序,gdbserver是arm开发板程序 arm官网链接:https://developer.arm.com/downloads/-/arm-gnu-toolchain-d…

速卖通、Lazada、美客多、亚马逊新品流量如何利用测评快速提升?

熟悉亚马逊的卖家应该清楚,亚马逊对于新发布的产品会有一定的流量倾向,特别是产品刚上架的2-4周,你的产品将在搜索结果中显示更多,排名比通常情况下更快。 第一步:优化好自己的产品listing1.新品上架标题要点标题权重…

SLM27524一款能够有效驱动MOSFET和IGBT电源开关双通道低侧栅极驱动器

深力科电子为“数据中心服务器电源”推荐一款双通道大非反相低侧栅极驱动器 SLM27524,该产品能够有效驱动MOSFET和IGBT电源开关。SLM27524采用一种能够从内部极大地降低击穿电流的设计,将高峰值的源电流和灌电流脉冲提供给电容负载,从而实现了…

NDK OpenGL离屏渲染与工程代码整合

NDK​系列之OpenGL离屏渲染与工程代码整合,本节主要是对上一节OpenGL渲染画面效果代码进行封装设计,将各种特效代码进行分离解耦,便于后期增加其他特效。 实现效果: 实现逻辑: 1.封装BaseFilter过滤器基类&#xff0c…

C++ 多线程编程(四) 原子类型atomic

C 11增加了原子类型atomic类&#xff0c;在一定条件下可以实现无锁编程。 1. 简介 atomic是一个模板类&#xff0c;定义如下&#xff1a; template< class T > struct atomic; atomic可以实现无锁编程&#xff0c;在效率上要比mutex高很多&#xff0c;直接看个直观的…

有道云笔记常用快捷键

F5 同步/刷新 Shift AltD 插入当前时间&#xff1a; CTRL B 加粗 CTRL I 斜体字 CTRL U 下划线 CTRL E 删除线 CTRL D 任务框 CTRL 1 变成标题1 CTRL 2 变成标题2 CTRL 3 变成标题3 CTRL 4 变成标题4 CTRL G 高亮块 CTRL H 加水平线 当前行成无序列表&a…

npm安装依赖实践总结

node下载地址&#xff1a;https://nodejs.org/en/download/releases 。可以看到node版本、npm版本、node_module版本。 【1】npm的全局安装路径 查看默认值&#xff1a; npm get prefix默认是C:\Users\你的用户名\AppData\Roaming\npm 可以通过 npm config prefix 更改全局…

为什么PCB设计完成后需要放置mark点

PCB设计中的Mark点是指一些标记点&#xff0c;通常用于促进PCB制造和组装过程中的准确性和一致性。这些标记点在制造过程中可以帮助操作员进行自动化定位&#xff0c;从而确保所有部件都被正确组装到其正确位置&#xff0c;这对于确保产品的质量和可靠性至关重要。 下面&#…

springboot抵御即跨站脚本(XSS)攻击

抵御即跨站脚本(XSS)攻击 XSS攻击通常指的是通过利用网站系统保存系统的漏洞&#xff0c;通过巧妙的方法把恶意指令注入到网页&#xff0c;用户加载网页的时候会自动执行恶意脚本 比如&#xff1a; <script>alert(xss); </script> 如果客户能在你的浏览器执行j…

C# Setting.settings . 配置用法

1、定义 在Settings.settings文件中定义配置字段。把作用范围定义为&#xff1a;User则运行时可更改(用户范围的字段数据更改存储在用户信息中&#xff0c;不在该程序文件中)&#xff0c;Applicatiion则运行时不可更改。可以使用数据网格视图(VS软件的Properties 下面的Settin…

几何深度学习 - 利用几何先验知识的深度学习

深度学习很难。 虽然通用逼近定理表明足够复杂的神经网络原则上可以逼近“任何东西”&#xff0c;但不能保证我们可以找到好的模型。 尽管如此&#xff0c;通过明智地选择模型架构&#xff0c;深度学习取得了巨大进步。 这些模型架构对归纳偏差进行编码&#xff0c;为模型提供…

makefile 条件判断语句

文章目录 前言一、条件判断语句的语法说明二、ifeq / ifneq三、ifdef / ifndef代码讲解&#xff1a; 四、经典示例总结 前言 一、条件判断语句的语法说明 makefile 中支持条件判断语句。 可以根据条件的值决定 make 的执行。可以 比较 两个不同变量或者变量和常量值。 条件判…

物理环境与网络通信安全

物理环境与网络通信安全 物理和环境安全环境安全设施安全-安全区域与边界防护传输安全 OSI七层模型ISO/OSI七层模型结构OSI模型特点OSI安全体系结构 TCP/IP协议安全TCP/IP协议结构网络接口层网络互联层核心协议-IP协议传输层协议-TCP&#xff08;传输控制协议&#xff09;传输层…

AMB300系列母线槽红外测温解决方案南沙XX养殖项目案例分享

安科瑞 耿敏花 一、 行业背景 随着当今社会的发展和用电量的急剧上升&#xff0c;现代化工程设施和装备的涌现&#xff0c;封闭式母线即母线槽因方便、节能、载流量大、机械强度高 、安装灵活、寿命长等特点&#xff0c;逐渐取代传统电缆&#xff0c;广泛应用于室内变压…

Window下载Android源码

Android 10源码下载 想要研究Android 源码的同学可以用此方法进行下载。源码从清华大学开源软件镜像站&#xff08;https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/&#xff09;下载。 使用Linux的同学直接参照清华镜像站提供的使用帮助(https://mirrors.tuna.tsinghua.edu…