Spring Boot 单元测试

目录

1.什么是单元测试?

2.单元测试的优点

[3.Spring Boot 单元测试使用](#3.Spring Boot 单元测试使用)

[3.1 生成单元测试的类](#3.1 生成单元测试的类)

[3.2 添加 Spring Boot 框架测试注解:@SpringBootTest](#3.2 添加 Spring Boot 框架测试注解:@SpringBootTest)

[3.3 添加单元测试业务逻辑](#3.3 添加单元测试业务逻辑)

[3.4 注解 @Transactional](#3.4 注解 @Transactional)

[4. 断言](#4. 断言)


1.什么是单元测试?

单元测试,是指对软件中的最小可测试单元进行检查和验证的过程叫单元测试

在 Spring Boot 中,最小可测试单元是指 方法

单元测试是开发者编写的一小段代码,用于检测被测代码的一个很小的、很明确的(代码)功能是否正确

执行单元测试就是为了证明某段代码的执行结果是否符合我们的预期

2.单元测试的优点

  1. 可以方便,快捷测试一个功能模块(方法级别)
  2. 在打包时会运行所有的单元测试,只有所有的单元测试都顺利通过之后才能正常打包,所以在这个过程中可以帮助我们发现问题,减少问题发生的概率
  3. 使用单元测试可以在不污染数据库数据的情况下,来测试某项功能

3.Spring Boot 单元测试使用

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

java 复制代码
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
</dependency>

3.1 生成单元测试的类

java 复制代码
class UserMapperTest {
    void getUserById() {
    }
}

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

java 复制代码
package com.example.ssmdemo1.mapper;
 
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
 
import static org.junit.jupiter.api.Assertions.*;
 
@SpringBootTest//表明当前单元测试是运行在Spring Boot环境中的
class UserMapperTest {
 
    @Test
    void getUserById() {
    }
}

3.3 添加单元测试业务逻辑

java 复制代码
package com.example.ssmdemo1.mapper;
 
import com.example.ssmdemo1.entity.Userinfo;
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//1、表明当前单元测试是运行在Spring Boot环境中的
class UserMapperTest {
    //2、注入测试对象
    @Autowired
    private UserMapper userMapper;
 
    @Test
    void getUserById() {
        //3、添加单元测试的业务代码
        Userinfo userinfo=userMapper.getUserById(1);
        System.out.println(userinfo);
    }
}

3.4 注解 @Transactional

在单元测试中添加此注解,表示在方法执行完之后回滚事务,这样就不会污染数据库了

比如这个修改操作,如果不想污染数据库中的数据,就可以直接添加注解 @Transactional

java 复制代码
@SpringBootTest// 1.表明当前单元测试是运行在Spring Boot环境中的
@Transactional // 开启一个事务,执行完恢复数据
class UserMapperTest {

    @Autowired// 2.注入测试对象:属性注入
    private UserMapper userMapper;

    @Test
//    @Transactional
    void getUserById() {
        // 3.添加单元测试的业务代码
        Userinfo userinfo = userMapper.getUserById(1);
        System.out.println(userinfo);
        Assertions.assertEquals("admin",userinfo.getUsername());
    }
}

4. 断言

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

相关推荐
码事漫谈1 分钟前
C++ 强制类型转换:类型安全的多维工具
后端
RainbowSea2 小时前
github 仓库主页美化定制
后端
RainbowSea2 小时前
从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战
java·spring boot·后端
笨手笨脚の2 小时前
Spring Core常见错误及解决方案
java·后端·spring
奶油松果2 小时前
Springboot自动装配 - redis和redission
java·spring boot·redis
计算机毕设匠心工作室2 小时前
【python大数据毕设实战】全球大学排名数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
千寻技术帮2 小时前
10413_基于Springboot的智慧养老院管理系统
spring boot·mysql·源码·安装·文档·ppt·养老院
VX:Fegn08952 小时前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计
荔枝hu2 小时前
springboot和shiro组合引入SseEmitter的一些坑
java·spring boot·后端·sseeitter
老华带你飞3 小时前
健身房|基于springboot + vue健身房管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端