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获取当前request
java·后端·spring
Java小白笔记3 小时前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
小哇6663 小时前
Spring Boot,在应用程序启动后执行某些 SQL 语句
数据库·spring boot·sql
JOJO___5 小时前
Spring IoC 配置类 总结
java·后端·spring·java-ee
白总Server5 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
luoluoal6 小时前
java项目之企业级工位管理系统源码(springboot)
java·开发语言·spring boot
蜜桃小阿雯6 小时前
JAVA开源项目 校园美食分享平台 计算机毕业设计
java·jvm·spring boot·spring cloud·intellij-idea·美食
Lingbug7 小时前
.Net日志组件之NLog的使用和配置
后端·c#·.net·.netcore
计算机学姐7 小时前
基于SpringBoot+Vue的篮球馆会员信息管理系统
java·vue.js·spring boot·后端·mysql·spring·mybatis
好兄弟给我起把狙7 小时前
[Golang] Select
开发语言·后端·golang