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 详解

相关推荐
苹果醋343 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
∝请叫*我简单先生2 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
荆州克莱3 小时前
mysql中局部变量_MySQL中变量的总结
spring boot·spring·spring cloud·css3·技术
zquwei3 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
dessler3 小时前
Docker-run命令详细讲解
linux·运维·后端·docker
武昌库里写JAVA4 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999064 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
Q_19284999064 小时前
基于Spring Boot的营销项目系统
spring boot