【Spring Boot】SpringBoot 单元测试

SpringBoot 单元测试

  • [一. 什么是单元测试](#一. 什么是单元测试)
  • [二. 单元测试的好处](#二. 单元测试的好处)
  • [三. Spring Boot 单元测试](#三. Spring Boot 单元测试)

一. 什么是单元测试

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

二. 单元测试的好处

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

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

3、使⽤单元测试,在测试功能的时候,可以不污染连接的数据库,也就是可以不对数据库进⾏任何改变的情况下测试功能。(需要 @Transactional 注解)

三. Spring Boot 单元测试

Spring Boot 项⽬创建时会默认单元测试框架 spring-boot-test,⽽这个单元测试框架主要是依靠另⼀个著名的测试框架 JUnit 实现的,打开 pom.xml 就可以看到:

单元测试的实现步骤

  1. ⽣成单元测试类

在要测试的类中右键 -> generate -> test

⽣成的代码:

javascript 复制代码
class UserMapperTest {
    @Test
    void findUserByName() {
    }
}

这个时候,此⽅法是不能调⽤到任何单元测试的⽅法的,此类只⽣成了单元测试的框架类,具体的业务代码要自己填充。

注意: 生成的单元测试的类的位置放在 test 对应的目录下

  1. 添加单元测试代码

1.添加 Spring Boot 框架测试注解:@SpringBootTest

javascript 复制代码
@SpringBootTest // 表明当前单元测试是在 Spring Boot 环境下的, 不加上这个注解的话, 无法注入要使用的类
class UserMapperTest {

    @Test
    void findUserByName() {
    }
}

2.添加单元测试业务逻辑

javascript 复制代码
@SpringBootTest
class UserMapperTest {

    @Resource
    private UserMapper userMapper;


    @Test
    void findUserByName() {
        User user = userMapper.findUserByName("zhaoliu");
        // 使⽤断⾔判断最终的结果是否符合预期
        Assertions.assertNotNull(user);
    }
}

如果想要不污染数据库的话可以在类上或者方法上加上 @Transactional 注解, 这样测试完会自动回滚.

javascript 复制代码
	@Transactional
    @Test
    void findUserByName() {
        User user = userMapper.findUserByName("zhaoliu");
        // 使⽤断⾔判断最终的结果是否符合预期
        Assertions.assertNotNull(user);
    }

简单的断⾔说明:

方法 说明
assertEquals 判断两个对象或者原始类型是否相等
assertNotEquals 判断两个对象或者原始类型是否不相等
assertSame 判断两个对象引用是否指向同一个对象
assertNotSame 判断两个对象引用是否指向不同对象
assertTrue 判断给定的 布尔值是否为 true
assertFalse 判断给定的 布尔值是否为 false
assertNull 判断给定的对象引用是否为 null
assertNotNull 判断给定的对象引用是否不为 null

好啦! 以上就是 SpringBoot 单元测试 的讲解,希望能帮到你 !
评论区欢迎指正 !

相关推荐
jktantan1 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
露天赏雪15 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
captain37616 小时前
▲统一功能——DispatcherServlet源码分析
java·spring·java-ee·log4j·maven
努力努力再努力wz1 天前
【Lua进阶系列】Lua 调试机制详解:从虚拟机调用栈、错误传播到 debug 库
junit·单元测试·lua
蜗牛8751 天前
为 Spring Boot 团队做一个 Elasticsearch 查询工作台:六种模式、语义补全与浏览器直连
spring boot
养军博客1 天前
Spring Boot 3.x + Spring Security 6.x 整合 JWT 实战:jjwt 与 java-jwt 两种工具库详解
java·spring boot·springsecurity
txxzjmzlh2 天前
SpringBoot 统⼀功能处理
java·spring boot·后端
秋天的怀念_David2 天前
算法一千零一夜 · 第二十六夜 协议的母语
java·spring boot·算法
余槐i2 天前
MySQL 8.0 联合索引走错:为什么加了索引查询反而从 200ms 变成 8s
java·spring boot·mysql·docker·性能优化
nice_lcj5202 天前
【从零理解 Spring AI · 03】Spring AI 在 Spring 生态里的位置
java·spring boot·大模型·spring ai·ai应用开发