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 天前
AI上下文工程:智能体系统的核心竞争力——超越Prompt Engineering的新范式
后端
程序新视界1 天前
什么是MySQL JOIN查询的驱动表和被驱动表?
数据库·后端·mysql
linweidong1 天前
理想汽车Java后台开发面试题及参考答案(下)
jvm·spring boot·spring cloud·rpc·虚拟机·feign·二叉树排序
无限进步_1 天前
C语言文件操作全面解析:从基础概念到高级应用
c语言·开发语言·c++·后端·visual studio
咖啡教室1 天前
每日一个计算机小知识:IP和域名
后端
Q_Q5110082851 天前
python+django/flask婚纱摄影拍照管理系统
spring boot·python·django·flask·node.js·php
咖啡教室1 天前
每日一个计算机小知识:Host
后端
咖啡教室1 天前
每日一个计算机小知识:Bit和Byte(比特和字节)
后端