2023.11.26 关于 Spring Boot 单元测试

news2024/9/29 23:13:25

目录

单元测试

优势

单元测试的使用

具体步骤

实现不污染数据库 


阅读下面文章之前 建议点击下方链接了解 MyBatis 的创建与使用

MyBatis 的配置与使用


单元测试

  • 单元测试 指对软件中的最小可测试单元进行检查和验证的过程
  • 单元测试 由开发人员在编码阶段完成,通常用于检测被测代码的一个很小的、很明确的功能是否正确
  • 如果测试结构符合我们的预期,称之为测试通过,否则就是测试未通过

优势

  • 可以简单、直观、快速的测试某一功能是否正确
  • 在打包项目之前,所有的单元测试必须通过,否则不能打包成功,所以可以帮助我们发现问题

  • 使用单元测试,在测试功能的时候,可以不污染连接的数据库,即能在不对数据库进行任何改变的情况下,测试功能(需使用 @Transactional 注解) 

单元测试的使用

  • 每个 Spring Boot 项目均会内置 单元测试的依赖

  • 该单元测试框架主要是依赖于 JUnit 实现的

具体步骤

  • 此处我们测试 根据 id 查询用户对象 功能

  • 加上该注释表明当前单元测试的类是运行在 Spring Boot 环境中的
  • 一定不能省略!!!
  • 加上注释后,完善我们的测试代码
import com.example.demo.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class UserMapperTest {

//    正因为该测试单元运行在 Spring Boot 下
//    所以我们可以使用依赖注入 userMapper Bean 对象
    @Autowired
    private UserMapper userMapper;

    @Test
    void getUserById() {
        User user = userMapper.getUserById(1);
        System.out.println(user);
    }
}
  • 运行观察输出结果

实现不污染数据库 

  • 当我们想要测试一些会对数据库进行 增删改 的 方法时,这必然会改动我们数据库中的数据
  • 为了避免出现上述情况,我们可以在 测试方法上添加 @Transactional 注解
  • 添加上该注解,在测试完成后会自动回滚事务,从而避免对数据库进行修改

实例理解

  • 我们想要修改 user 表中的 id = 1 的用户密码,其修改为 1234

  • 如上表所示,该用户的原始密码为 123456

 初始化 UserMapper 接口

  • 此处我们在接口中添加一个 update 方法
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

//添加 @Mapper 注解 代表该接口会伴随这 项目的启动而注入到容器中
@Mapper
public interface UserMapper {
    
//    根据 id 修改用户密码
    Integer update(@Param("user_id") Integer id,
                   @Param("new_password") String newPassword);
}

初始化 UserMapper XML 文件

  • 在与 接口相对应的 XML 文件中
  • 添加上与 update 方法 相对应的 sql 语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

    <update id="update">
        update user set password = #{new_password} where id = #{user_id};
    </update>

</mapper>

创建 update 的测试方法

  • 注意 如果出现该报错,直接点击 OK 即可
  • 因为我们之前 测试 getUserById 方法时已经创建过 UserMapperTest 类了
  • 所以我们仅点击 OK,将该类更新即可
  • 即在原 UserMapperTest 类中,更新添加上我们需要测试的 update 方法

  • 此处给 update 方法传入 id = 1 和 newPassword = "1234"
@Test
@Transactional
void update() {
    int result = userMapper.update(1,"1234");
    System.out.println("update 方法 :" + (result == 1 ? "成功" : "失败"));
}

执行测试方法

  • 测试方法执行成功

  • 重新查询数据库,发生数据并未污染


对 JUnit5 感兴趣的 可以点击下方链接详细了解

关于 JUnit5 详解

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

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

相关文章

销售人员应该具备哪些良好心态和素养

销售人员应该具备哪些良好心态和素养 作为市场的前线战士&#xff0c;销售人员的心态与素养对于成功销售至关重要。以下所列举的&#xff0c;正是销售人员不可或缺的十种良好心态与专业素养&#xff0c;它们将帮助你更好地应对销售挑战&#xff0c;提升业绩。 1. 积极乐观的态…

11.盛最多的水的容器

一、题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 题目难度&#xff1a;中等 示例&a…

【备忘录】快速回忆ElasticSearch的CRUD

导引——第一条ElasticSearch语句 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": "ik_smart" }概念 语法规则 HTTP_METHOD /index/_action/IDHTTP_METHOD 是 HTTP 请求的方法&#xff0c;常见的包括…

Flask 运用Xterm实现交互终端

Xterm是一个基于X Window System的终端仿真器&#xff08;Terminal Emulator&#xff09;。Xterm最初由MIT开发&#xff0c;它允许用户在X Window环境下运行文本终端程序。Xterm提供了一个图形界面终端&#xff0c;使用户能够在图形桌面环境中运行命令行程序。而xterm.js是一个…

物理世界中的等距3D对抗样本

论文题目&#xff1a;Isometric 3D Adversarial Examples in the Physical World 会议&#xff1a;NIPS 2022 点云&#xff1a; 点云——表达目标空间分布和目标表面特性的海量点集合&#xff0c;点包含xyz坐标信息 能够包含颜色等其他信息 使用顶点、边和面的数据表征的三维…

【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!

目录 ⛳️【SQL Server Management】 ⛳️1. 启动登录 ⛳️2. 忘记密码 ⛳️3. 操作数据库和表 3.1 新建数据库text 3.2 新建表 3.3 编辑表 3.4 编写脚本 ⛳️【SQL Server Management】 ⛳️1. 启动登录 需要开启服务 ⛳️2. 忘记密码 登录windows--> 安全性 -->…

基于Java SSM框架+Vue留学生交流互动论坛网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现学生交流互动论坛网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

四川开启智能巡河形式,无人机水利行业应用再创新

在四川省某区域&#xff0c;复亚智能无人机系统以其独特的机场网格化部署得到成功应用&#xff0c;覆盖了该区域内多条市级、省级河流&#xff0c;成为水利行业的新亮点。这一先进系统以无人机水利行业应用为核心&#xff0c;通过网格化和信息化手段&#xff0c;实现了对水域环…

Java核心知识点整理大全19-笔记

目录 14.1.5.2. MemStore 刷盘 全局内存控制 MemStore 达到上限 RegionServer 的 Hlog 数量达到上限 手工触发 关闭 RegionServer 触发 Region 使用 HLOG 恢复完数据后触发 14.1.6.HBase vs Cassandra 15. MongoDB 15.1.1. 概念 15.1.2. 特点 16. Cassandra 16.1.1…

activate jrebel JRebel激活过程

1.下载反向代理 地址&#xff1a;https://pan.baidu.com/s/1wklvDtyrSBXE4I6lKCxXBg?pwdidos 下载完后双击运行 2.在idea中如下步骤点击&#xff1a;File ——> Setting... ——> JRebel ——> Activate now 填入Team URL 1.http://127.0.0.1:8888/uuid //这个…

用于图像分类任务的经典神经网络综述

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

电脑如何录音?适合初学者的详细教程

“电脑怎么录音呀&#xff1f;参加了一个学校举办的短视频大赛&#xff0c;视频拍摄都很顺利&#xff0c;音乐却出了问题&#xff0c;朋友说可以用电脑录制一段音乐应付一下&#xff0c;可是我不会操作&#xff0c;有哪位大佬教教我&#xff01;” 声音是一种强大的媒介&#…

回归预测 | MATLAB实现SMA+WOA+BOA-LSSVM基于黏菌算法+鲸鱼算法+蝴蝶算法优化LSSVM回归预测

回归预测 | MATLAB实现SMAWOABOA-LSSVM基于黏菌算法鲸鱼算法蝴蝶算法优化LSSVM回归预测 目录 回归预测 | MATLAB实现SMAWOABOA-LSSVM基于黏菌算法鲸鱼算法蝴蝶算法优化LSSVM回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现SMAWOABOA-LSSVM基于黏菌算法…

Ubuntu18.04磁盘取证-中难度篇

涉及的镜像文件&#xff1a; sdb.vhd uac.tar ubuntu.20211208.mem 需要利用的工具&#xff1a; volatility3 volatility2.6.1 FTK/Autopsy Strings 题干 容器是一个Ubuntu Linux 蜜罐&#xff0c;用来观察利用 CVE-2021-41773 的漏洞攻击者想要做什么。 您将看到一个 cr…

高仿IT之家微信小程序(附精选源码32套,涵盖商城团购等)

项目预览 主要包含主页资讯&#xff0c;圈子俩大模块 主页 资讯详情 圈子 相关代码 网络请求 import wx from wx import Fly from flyioconst request new Fly()request.interceptors.request.use((request) > {wx.showNavigationBarLoading()return request })requ…

Linux - 动静态库(下篇)

前言 在上篇博客当中&#xff0c;对静态库是什么&#xff0c;怎么使用&#xff0c;简单实现自己的静态库&#xff0c;这些做了描述&#xff0c;具体请看上篇博客&#xff1a; 本篇博客将会对 动态库是什么&#xff0c;怎么使用&#xff0c;简单实现自己的动态库&#xff0c…

什么是yum?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

浅谈安科瑞多功能仪表和网关在中国香港某项目的应用

摘要&#xff1a;本文介绍了安科瑞多功能电能表在中国香港某项目的应用。APM系列交流多功能仪表是一款专门为电力系统、工矿企业、公用事业和智能建筑用于电力监控而设计的智能电表。 Abstract&#xff1a;This article introduces the application of the IoT power meter in…

AI超级个体:ChatGPT与AIGC实战指南

目录 前言 一、ChatGPT在日常工作中的应用场景 1. 客户服务与支持 2. 内部沟通与协作 3. 创新与问题解决 二、巧用ChatGPT提升工作效率 1. 自动化工作流程 2. 信息整合与共享 3. 提高决策效率 三、巧用ChatGPT创造价值 1. 优化产品和服务 2. 提高员工满意度和留任率…

vue3中的Fragment、Teleport、Suspense新组件

Fragment组件 在Vue2中: 组件必须有一个根标签 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中 好处: 减少标签层级, 减小内存占用 <template><div style"font-size: 14px;"><p> 组件可以没有根标签</p&g…