快速上手 SpringBoot 单元测试

news/2024/11/20 23:33:31/

✏️作者:银河罐头
📋系列专栏:JavaEE

🌲“种一棵树最好的时间是十年前,其次是现在”

目录

  • 什么是单元测试?
  • 单元测试有哪些好处
  • SpringBoot 单元测试使用
  • 单元测试的实现步骤
    • 生成单元测试类
    • 添加单元测试代码

什么是单元测试?

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

单元测试有哪些好处

1.可以⾮常简单、直观、快速的测试某⼀个功能是否正确。

2.可以跳过项目里的其他模块(如登录,权限验证),直接定位去测试该单元。

3.使⽤单元测试,在测试功能的时候,可以不污染连接的数据库,也就是可以不对数据库进⾏任何改 变的情况下,测试功能。

(比如我想验证"插入功能",这时候我需要向数据库中一条无用数据来验证这个功能,这样就会污染数据库)

4.使⽤单元测试可以帮我们在打包的时候,发现⼀些问题,因为在打包之前,所有的单元测试必须通 过,否则不能打包成功。

SpringBoot 单元测试使用

Spring Boot 项⽬创建时会默认添加单元测试框架 spring-boot-test,打开 pom.xml 就可以看到,以下信息是 Spring Boot 项⽬创建是⾃动添加的:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

单元测试的实现步骤

@Mapper
public interface UserMapper {List<UserEntity> getAll();//根据 id 查询某个用户信息UserEntity getUserById(@Param("id") Integer id);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper"><select id="getAll" resultType="com.example.demo.entity.UserEntity" >select * from userinfo</select><select id="getUserById" resultType="com.example.demo.entity.UserEntity">select * from userinfo where id = ${id};</select>
</mapper>

来测 getUserById() 这个方法。

生成单元测试类

image-20230528202523810

image-20230528202729186

image-20230528202834681

image-20230528203154569

image-20230528203346614

添加单元测试代码

@SpringBootTest//表示当前单元测试的类是运行在 SpringBoot 环境中的
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid getUserById() {UserEntity user = userMapper.getUserById(2);System.out.println(user);}
}

image-20230528205719384

mysql> select * from userinfo;
+----+----------+----------+-------+---------------------+---------------------+-------+
| id | username | password | photo | createtime          | updatetime          | state |
+----+----------+----------+-------+---------------------+---------------------+-------+
|  1 | admin    | admin    |       | 2021-12-06 17:10:48 | 2021-12-06 17:10:48 |     1 |
|  2 | zhangsan | zhangsan |       | 2021-12-06 17:10:48 | 2021-12-06 17:10:48 |     1 |
+----+----------+----------+-------+---------------------+---------------------+-------+
2 rows in set (0.01 sec)

测试通过,成功查询到 id = 2 的用户的信息。

同理,可以测试 getAll() 方法:

image-20230528210151511

测试通过,数据库里确实只有 2 条数据。


http://www.ppmy.cn/news/103471.html

相关文章

LeetCode - 1049 最后一块石头的重量 II (0-1背包)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130935119 LeetCode:1049. 最后一块石头的重量 II 题目:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选…

微服务架构之服务监控与追踪

与单体应用相比&#xff0c;在微服务架构下&#xff0c;一次用户调用会因为服务化拆分后&#xff0c;变成多个不同服务之间的相互调用&#xff0c;每个服务可能是由不同的团队开发&#xff0c;使用了不同的编程语言&#xff0c;还有可能部署在不同的机器上&#xff0c;分布在不…

MySQL主从复制(概念和作用、实战、常见问题和解决办法、扩展、GTID同步集群、集群扩容、半同步复制)

文章目录 1. 主从复制1.1 概念和作用1.2 主从复制的步骤1.3 搭建主从同步实战1.3.1 配置master主库1.3.2 配置slave从库1.3.3 MySQL主从复制监控和管理、测试1.3.4 主从复制的问题和解决方法 1.4 主从同步扩展1.4.1 主库同步与部分同步&#xff08;同步范围限制&#xff09;1.4…

第五次

1.总结变量的类型及含义 含义&#xff1a;顾名思义&#xff0c;变量就是程序设计语言中的一个可以变化的量&#xff0c;当然&#xff0c;可以变化的是变量的值。几乎所 有的程序设计语言中都有定义变量&#xff0c;并且其涵义也大同小异。从本质上讲&#xff0c;变量就是在程序…

Linux:centos:计划任务管理《at》

date 查看当前时间或管理时间 年-月-日 周几 时间 时间标准 如果想把他改成2024年6月1日12&#xff1a;30 使用 date 060112302024 06 6月 01 1日 1230 12&#xff1a;30 2024 2024年 使用at之前要安装他 有些用户没有安装的情况下 最好使…

Bitcoin Core 25.0已发布;以太坊Geth发布v1.12.0版本;BNB链将进行Luban升级|Tokenview

一周速览&#xff1a; Bitcoin Core 25.0 已正式发布&#xff1b; 以太坊 客户端Geth发布 v1.12.0 版本&#xff1b; 以太坊客户端 Prysm 推出 v4.0.5 版本&#xff1b; BNB Chain 将于区块高度 29,020,050 处进行网络升级Luban 01 BTC Bitcoin Core 25.0 已正式发布 Bitcoi…

【Atlas200】使用sendData及getResult接口进行pipline目标检测框数据读取(C++)

目录 简介读取主函数pipline文件安装json解析类RapidJSON使用RapidJSON解析json输出结果简介 当今,人工智能技术已经渗透到我们生活的方方面面,其中目标检测技术是非常重要的一种技术。目标检测技术可以对图像或视频中的物体进行识别和定位,是实现自动驾驶、智能监控等众多…

SQL性能优化的几个思路(二)

最近又总结了一批SQL性能优化的方法&#xff0c;大家可以参照着做。前一次的优化思路在这里&#xff1a; SQL性能优化的几个思路 1、WHERE、JOIN的字段&#xff0c;能用主表字段就用主表字段&#xff0c;比如下面这样&#xff1a; SELECT * FROM A --主表INNER JOIN B ON A.…