2023.11.26 关于 Spring Boot 单元测试

目录

单元测试

优势

单元测试的使用

具体步骤

实现不污染数据库


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

MyBatis 的配置与使用


单元测试

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

优势

  • 可以简单、直观、快速的测试某一功能是否正确
  • 在打包项目之前,所有的单元测试必须通过,否则不能打包成功,所以可以帮助我们发现问题
  • 使用单元测试,在测试功能的时候,可以不污染连接的数据库,即能在不对数据库进行任何改变的情况下,测试功能(需使用 @Transactional 注解)

单元测试的使用

  • 每个 Spring Boot 项目均会内置 单元测试的依赖
  • 该单元测试框架主要是依赖于 JUnit 实现的

具体步骤

  • 此处我们测试 根据 id 查询用户对象 功能
  • 加上该注释表明当前单元测试的类是运行在 Spring Boot 环境中的
  • 一定不能省略!!!
  • 加上注释后,完善我们的测试代码
java 复制代码
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 方法
java 复制代码
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 复制代码
<?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"
java 复制代码
@Test
@Transactional
void update() {
    int result = userMapper.update(1,"1234");
    System.out.println("update 方法 :" + (result == 1 ? "成功" : "失败"));
}

执行测试方法

  • 测试方法执行成功
  • 重新查询数据库,发生数据并未污染

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

关于 JUnit5 详解

相关推荐
秋野酱1 小时前
如何在 Spring Boot 中实现自定义属性
java·数据库·spring boot
安的列斯凯奇2 小时前
SpringBoot篇 单元测试 理论篇
spring boot·后端·单元测试
架构文摘JGWZ2 小时前
FastJson很快,有什么用?
后端·学习
BinaryBardC2 小时前
Swift语言的网络编程
开发语言·后端·golang
邓熙榆2 小时前
Haskell语言的正则表达式
开发语言·后端·golang
多则惑少则明4 小时前
SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别
spring boot·spring·ssh
Swift社区4 小时前
【分布式日志篇】从工具选型到实战部署:全面解析日志采集与管理路径
人工智能·spring boot·分布式
专职5 小时前
spring boot中实现手动分页
java·spring boot·后端
Ciderw5 小时前
Go中的三种锁
开发语言·c++·后端·golang·互斥锁·
m0_748246356 小时前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端