【单元测试】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.xdnf.cn/news/1452778.html

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

相关文章

Windows10 MySQL(8.0.37)安装与配置

一、MySQL8.0.37下载 官网下载链接: https://dev.mysql.com/downloads/ 解压文件,解压到你想要的位置 二、新建MySQL配置文件 右键新建文本文档 新建my.txt文件 编辑my.txt文件,输入以下内容 [mysqld] # 设置 3306 端口 port3306 # 设…

STM32项目分享:智慧农业(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…

[Vulnhub]Wintermute LFI+SMTP+Screen+Structv2-RCE+Lxc逃逸

概要 靶机 192.168.8.104 信息收集 $ nmap 192.168.8.103 --min-rate 1000 -sC -sV 结果: Starting Nmap 7.92 ( https://nmap.org ) at 2024-06-15 05:54 EDT Nmap scan report for 192.168.8.103 (192.168.8.103) Host is up (0.035s latency). Not shown: 997 closed t…

【LLM】吴恩达『微调大模型』课程完全笔记

Finetuning Large Language Models 版权说明: 『Finetuning Large Language Models』是DeepLearning.AI出品的免费课程,版权属于DeepLearning.AI(https://www.deeplearning.ai/)。 本文是对该课程内容的翻译整理,只作为教育用途,不…

数据结构之LinkedList与链表(上)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 手动实现单链表的源码 手动实现双链表的源码 分析 LinkedList 的源码 LinkedList的使用 …

ChatGPT关联技术

ChatGPT关联技术 一、前馈神经网络二、序列到序列模型(Seq2Seq)三、自注意力机制四、多头自注意力机制五、自监督学习六、Transformer模型七、语言生成技术八、多语种语言模型九、预训练语言模型十、生成式预训练模型(GPT)十一、近…

人民日报:高考填志愿十问十答,填报志愿时需要考虑哪些因素?

高考结束,志愿填报即将开始,填报志愿时需要考虑哪些因素?如何避免高分低录甚至落榜?高考填志愿你需要知道的事↓↓ 祝福考生考入理想大学、就读喜欢的专业。加油! 责任编辑:曹继炜

【计算机网络仿真实验-实验2.6】带交换机的RIP路由协议

实验2.6 带交换机的rip路由协议 1. 实验拓扑图 2. 实验前查看是否能ping通 不能 3. 三层交换机配置 switch# configure terminal switch(config)# hostname s5750 !将交换机更名为S5750 S5750# configure terminal S5750(config)#vlan 10 S5750(config-vlan)#exit S57…

Android 工程副总裁卸任

Android 工程副总裁卸任 Android工程副总裁Dave Burke宣布,他将辞去领导Android工程的职位,将重心转向“AI/生物”项目。不过,他并没有离开Alphabet,目前仍将担任Android系统开发顾问的角色。 Burke参与了Android系统的多个关键…

偏微分方程算法之抛物型方程差分格式编程示例三(C-N格式)

目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 已知其精确解为。分别取以下三种步长: ①

随机森林算法进行预测(+调参+变量重要性)--血友病计数数据

1.读取数据 所使用的数据是血友病数据,如有需要,可在主页资源处获取,数据信息如下: import pandas as pd import numpy as np hemophilia pd.read_csv(D:/my_files/data.csv) #读取数据 2.数据预处理 在使用机器学习方法时&…

【html】学会这一套布局,让你的网页更加

很多小伙伴们在刚刚开始学习网页设计的时候不知道怎么布局今天给大家介绍一种非常实用且更加专业的一种布局。 灵感来源: 小米官网 布局图; 实例效果图: 这是一个简单的HTML模板,包括头部、内容区域和底部。 头部部分包括一个分为左右两部分…

有监督学习——高斯过程

1. 高斯过程 高斯过程(Gaussian Process)是一种假设训练数据来自无限空间且各特征都符合高斯分布(高斯分布又称“正态分布”)的有监督学习。 高斯过程是一种概率模型,在回归或分类预测都以高斯分布标准差的方式给出预…

SSM考研咨询app-计算机毕业设计源码05262

摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设考研咨询app。 本设计…

四川汇聚荣聚荣科技有限公司是干什么的,拼多多运营如何做?

四川汇聚荣聚荣科技有限公司是干什么的,拼多多运营如何做?随着电商行业的快速发展,越来越多的企业开始涉足这一领域。其中,四川汇聚荣聚荣科技有限公司便是其中的一员。那么,这家公司究竟是做什么的呢?简单来说,它是…

2078.两栋颜色不同且距离最远的房子

街上有 n 栋房子整齐地排成一列,每栋房子都粉刷上了漂亮的颜色。给你一个下标从 0 开始且长度为 n 的整数数组 colors ,其中 colors[i] 表示第 i 栋房子的颜色。 返回 两栋 颜色 不同 房子之间的 最大 距离。 第 i 栋房子和第 j 栋房子之间的距离是 a…

用一个ESP32S3-Zero把有线键盘变为无线

三脚猫最近一直琢磨,那些喜欢买剪线键盘,以及自制键盘瞎折腾的人都是怎么搞的。经过不懈努力,终于想明白除了直接的硬件一个个pin针的高低电压判断后转给蓝牙,拿到现成的古董剪线键盘还有一个方式其实是在usb host转发给蓝牙类似这…

【Java】图书管理系统-控制台输出

项目原码压缩包在我主页的资源中免费领取。(在IDEA中运行,启动类在src -> Main 中运行) 图书管理系统 设计一个简单的控制台输出的图书管理系统,我们首先需要明确其基本功能、设计内容以及设计要求。这个系统可以包括以下几个…

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; // 哪怕是…

[DDR4] 总目录 学习路线

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 传送门: 总目录 目录 基础篇 1-1 DDR4 发展历史 1-2 DDR4 和 DDR3 差异与优势 1-3 DDR4 内部结构 1-4 DDR4 工作原理 协议篇 2-1 DDR4 引脚 设计篇 实践篇 进阶篇 学习路线&#xff1a; 了解DDR4的基本知识…