【单元测试】Spring Boot 的测试库

Spring Boot 的测试库

  • 1.了解回归测试框架 JUnit
  • 2.了解 assertThat
  • 3.了解 Mockito
  • 4.了解 JSONPath
  • 5.测试的回滚

单元测试unit test)是为了检验程序的正确性。一个单元可能是单个 程序对象方法 等,它是应用程序的最小可测试部件。

单元测试的必要性如下:

  • 预防 Bug。
  • 快速定位 Bug。
  • 提高代码质量,减少耦合。
  • 减少调试时间。
  • 减少重构的风险。

Spring Boot 提供了 spring-boot-starter-test 启动器。通过它,能引入一些有用的测试库,如下所示。

  • Spring Test & Spring BootTest:Spring Boot 提供的应用程序功能集成化测试支持。
  • Junit:Java 应用程序单元测试标准类库。
  • AssertJ:轻量级的断言类库。
  • Hamcrest:对象匹配器类库。
  • Mockito:Java Mock 测试框架。
  • JsonPath:JSON 操作类库。
  • JSONassert:用于 JSON 的断言库。

1.了解回归测试框架 JUnit

JUnit 是对程序代码进行单元测试的 Java 框架。它用来编写自动化测试工具,降低测试的难度、减少烦琐性,并有效避免出现程序错误。

JUnit 测试是 白盒测试(因为知道测试如何完成功能和完成什么样的功能)。要使用 JUnit,则只需要继承 TestCase 类。

JUnit 提供以下注解。

注解
解释
@BeforeClass在所有测试单元前执行一次,一般用来初始化整体的代码。
@AfterClass在所有测试单元后执行一次,一般用来销毁和释放资源。
@Before在每个测试单元前执行,一般用来初始化方法。
@After在每个测试单元后执行,一般用来回滚测试数据
@Test编写测试用例。
@Test(timeout=1000)对测试单元进行限时。这里的 1000 1000 1000 表示若超过 1 s 1s 1s 则超时测试失败。
@Test(expected=Exception.class)指定测试单元期望得到的异常类。如果执行完成后没有抛出指定的异常,则测试失败。
@lgnore执行测试时将忽略掉此方法。如果用于修饰类,则忽略整个类。
@RunWith在 JUnit 中有很多 Runner,它们负责调用测试代码。每个 Runner 都有特殊功能,应根据需要选择不同的 Runner 来运行测试代码。

2.了解 assertThat

Unit 4.4 结合 Hamcrest 提供了一个新的断言语法 assertThat。使用 assertThat 的一个断言语句结合 Hamcrest 提供的匹配符,就可以表达全部的测试思想。

(1)assertThat 的基本语法

assertThat([value], [matcher statement])
  • value:要测试的变量值。
  • matcher statement:如果 value 值与 matcher statement 所表达的期望值相符,则测试成功,否则失败。简单地说,就是 “两个值进行比较”。

(2)一般匹配符

  • assertThat(testNumber,allOf( greaterThan(5),lessThan(8));allOf 表示,所有条件必须都成立,测试才能通过。
  • … …

(3)字符串相关匹配符

  • assertThat(testString,is("longzhiran"));is 表示,如果前面待测的 testString 等于后面给出的 String,则测试通过。
  • … …

(4)数值相关匹配符

  • assertThat(testDouble,closeTo(1.0,8.8));closeTo 表示,如果测试的浮点型数 testDouble 在 1.0 ~ 8.8 之间,则测试通过。
  • … …

(5)collection 相关匹配符

  • assertThat(mObject,hasEntry("key","value");:hasEntry 表示,如果测试的 Map 对象 mObect 含有一个键值为 key 对应元素值为 value 的 Entry 项,则测试通过。
  • … …

3.了解 Mockito

Mockito 是 GitHub 上使用最广泛的 Mocking 框架。它提供简洁的 API 用来测试。Mockito 简单易学、可读性强、验证语法简洁。
在这里插入图片描述
与 JUnit 结合使用,Mockito 框架可以创建和配置 Mock 对象。

4.了解 JSONPath

JSONPath 是 xPath 在 JSON 中的应用。它的数据结构通常不一定有根元素,它用一个抽象的名字 $ 来表示 最外层对象,而且允许使用通配符 * 表示所有的子元素名和数组索引。

JSONPath 表达式可以使用 . 符号解析 JSON,如以下代码:

$.person.card[0].num

或使用 [] 符号,如以下代码:

$['person']['card'][0]['num']

5.测试的回滚

在单元测试中可能会产生垃圾数据,可以开启事务功能进行回滚。在方法或类头部添加注解 @Transactional 即可。用法见以下代码:

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class CardRepositoryTest {@Autowiredprivate CardRepository cardRepository;@Testpublic void testRollBack(){//查询操作Card card = new Card();card.setNum(3);cardRepository.save(card);}
}

上述代码在类上添加了注解 @Transactional,测试完成后就会回滚,不会产生垃圾数据。如果要关闭回滚,则只要加上注解 @Rollback(false) 即可。

🚀 如果使用的数据库是 MySQL,有时会发现加了注解 @Transactional 也不会回滚,多数情况下是因为默认引擎不是 InnoDB。

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

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

相关文章

[大模型]XVERSE-7B-chat Transformers 推理

XVERSE-7B-Chat为XVERSE-7B模型对齐后的版本。 XVERSE-7B 是由深圳元象科技自主研发的支持多语言的大语言模型(Large Language Model),参数规模为 70 亿,主要特点如下: 模型结构:XVERSE-7B 使用主流 Deco…

用于每个平台的最佳WordPress LMS主题

你已选择在 WordPress 上构建学习管理系统 (LMS)了。恭喜! 你甚至可能已经选择了要使用的 LMS 插件,这已经是成功的一半了。 现在是时候弄清楚哪个 WordPress LMS 主题要与你的插件配对。 我将解释 LMS 主题和插件之间的区别,以便你了解要…

如何打开pak文件-翻译pak语言包

最近碰到一些程序的语言包是pak格式,用Notepad打开全是乱码,百度搜索了一下,pak是一种少见的压缩文件格式,是pak Quake系列游戏所采用的一种特殊压缩包格式,由Quake游戏公司开发,用高版本的winrar可以打开&…

测试 halcon算子 derivate_gauss 高斯一阶导数卷积

参上了 matlab fileexchange 有人上传了高斯 dx,dy一阶导卷积代码 卷积核的计算我修改成了核元素绝对值求做分母 归一化 和halcon的 derivate_gauss算子的计算结果对别如下 还是不知道怎么做到两者结果一致. 测试图像: 我的: halcon的: 获取两份图像的灰度值到数组并做对应位…

即时聊天系统

功能描述 该项目是一个前后端分离的即时聊天项目,前端采用vue2、后端使用springboot以mysql8.0作为数据库。 项目功能包含了单聊、群聊功能。在此基础上增加了对好友的功能操作,如备注设为通知、视频聊天、语音聊天、置顶、拉入黑名单、清空聊天记录等。…

【面试干货】Integer 和 int 的区别

【面试干货】Integer 和 int 的区别 1、基本类型与包装类型2、内存占用3、自动装箱与拆箱4、null 值5、常量池6、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,Integer 和 int 是两种不同类型的变量,…

leetcode LRU 缓存

leetcode: LRU 缓存 LRU 全称为 Least Recently Used,最近最少使用,常常用于缓存机制,比如 cpu 的 cache 缓存,使用了 LRU 算法。LRU 用于缓存机制时,关键的是当缓存满的时候有新数据需要加载到缓存的,这个…

自动化测试断言

自动化判断测试用例的执行的结果是否成功,是通过判断测试得到的实际结果与预期结果是否相等决定的。这个时候就用到了断言。 检查点分为两个,一个是页面级别的检查,包括网页的标题和网址,以及是否包含某个文字 另一个检查点是页…

CSS从入门到精通——动画:CSS3动画延迟和完成后状态的保持

目录 任务描述 相关知识 动画状态 动画完成时的状态 动画延迟 编程要求 任务描述 本关任务:用 CSS3 实现小车等待红绿灯的效果。效果图如下: 相关知识 为了完成本关任务,你需要掌握:1.动画状态,2.动画完成时的状…

[Cloud Networking] SPDY 协议

文章目录 1. 背景2. SPDY 之前3. SPDY 项目目标4. SPDY 功能特点4.1 SPDY基本功能4.2 SPDY高级功能 1. 背景 TCP是通用的、可靠的传输协议,提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。 HTTP是提供基本请求/响应语义的应用层协议。 不…

Linux下的串口通信

串口通信 基础知识: 什么是串口? 串口全称串行通信接口,是一种常用于电子设备之间通信的异步,全双工接口,典型的串口通信只需要 3 根线,分别是地线 (GND),发送线(TX),接收线(RX)。如…

【react小项目】bmi-calculator

bmi-calculator 目录 bmi-calculator初始化项目01大致布局01代码 02完善样式02代码 03输入信息模块03代码 04 使用图表04代码 05详细记录信息渲染05代码 06 让数据变成响应式的06-1输入框的数据处理06-2图表,和记录信息的区域数据处理 07 删除功能,撤销功…

基于C#开发web网页管理系统模板流程-主界面统计功能完善

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计-CSDN博客 统计功能是管理系统很常见的功能,例如仓库管理系统要统计某时间段的出入库以…

QT信号与槽/窗口组件优化/使用QT制作QQ登录界面

使用手动连接,将登录框中的取消按钮使用第二中连接方式,右击转到槽,在该槽函数中,调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断u界面上输入的账号是否为"admin",…

永磁同步直线电机(PMLSM)控制与仿真3-永磁同步直线电机数学三环控制整定

文章目录 1、电流环参数整定2、速度环参数整定3、位置环参数整定 写在前面:原本为一篇文章写完了永磁同步直线电机数学模型介绍,永磁同步直线电机数学模型搭建,以及永磁同步直线电机三环参数整定及三环仿真模型搭建,但因为篇幅较长…

HTML前端

html 超文本标记语言 文本&#xff1a;文字字符 超文本&#xff1a;网页内容 标记&#xff1a;标签 标识 提供许多标签&#xff0c;不同标签功能不同&#xff0c;网页就是通过这些标签描述出来的&#xff0c;最终由浏览器解释运行我们看到的网页 <!-- html注释<!DO…

C++ 50 之 继承中的对象模型

继承中的对象模型 在C编译器的内部可以理解为结构体&#xff0c;子类是由父类成员叠加子类新成员而成&#xff1a; #include <iostream> #include <string> using namespace std;class Base03{ public:int m_a; protected:int m_b; private:int m_c; // 哪怕是…

lua对接GPT4实现对话

演示效果&#xff1a; 准备材料&#xff1a; 1、FastWeb网站开发服务&#xff1a;fwlua.com 2、一台服务器 该示例使用开源项目&#xff1a;fastweb 实现。 代码比较简单&#xff0c;主要是两部分&#xff0c;一个lua代码和一个html页面&#xff0c;用来用户发起请求和后台…

面向事件编程之观察者模式

前言 村里的老人常说&#xff1a;真男人就该懂得遵守“三不原则”——不主动、不拒绝、不负责。 一个复杂的软件系统&#xff0c;其中必然会存在各种各样的“对象”&#xff0c;如果在设计之初没有注意控制好耦合度&#xff0c;导致各个对象甚至是函数之间高度耦合&#xff0…

网络安全知识全景地图V1.0 - 20240616更新

网络安全领域的知识全景涵盖了从基础概念到高级技术的广泛内容。博主基于自身十年多的工作经验结合CISSP认证官方教材按照不同的主题和层次梳理出如下高层次的概览地图&#xff0c;可以帮助个人和组织理解网络安全领域的主题。 1.1. 基础理论 1.1.1. 网络安全概述 网络安全的…