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 |

相关推荐
小马爱打代码5 分钟前
Spring Boot - 实现邮件发送
spring boot·后端
褚翾澜6 分钟前
Ruby语言的代码重构
开发语言·后端·golang
你的人类朋友1 小时前
浅谈Object.prototype.hasOwnProperty.call(a, b)
javascript·后端·node.js
仙灵灵1 小时前
前端的同学看过来,今天讲讲jwt登录
前端·后端·程序员
Home1 小时前
一、Java性能优化--Nginx篇(一)
后端
陈随易1 小时前
VSCode v1.99发布,王者归来,Agent和MCP正式推出
前端·后端·程序员
ShooterJ1 小时前
海量序列号的高效处理方案
后端
你的人类朋友1 小时前
CommonJS模块化规范
javascript·后端·node.js
小码编匠2 小时前
C# 实现西门子S7系列 PLC 数据管理工具
后端·c#·.net
Postkarte不想说话2 小时前
Ubuntu24.04搭建TrinityCore魔兽世界
后端