目录
1.什么是单元测试?
2.单元测试的优点
3.Spring Boot 单元测试使用
3.1 生成单元测试的类
3.2 添加 Spring Boot 框架测试注解:@SpringBootTest
3.3 添加单元测试业务逻辑
3.4 注解 @Transactional
4. 断言
1.什么是单元测试?
单元测试,是指对软件中的最小可测试单元进行检查和验证的过程叫单元测试
在 Spring Boot 中,最小可测试单元是指 方法
单元测试是开发者编写的一小段代码,用于检测被测代码的一个很小的、很明确的(代码)功能是否正确
执行单元测试就是为了证明某段代码的执行结果是否符合我们的预期
2.单元测试的优点
- 可以方便,快捷测试一个功能模块(方法级别)
- 在打包时会运行所有的单元测试,只有所有的单元测试都顺利通过之后才能正常打包,所以在这个过程中可以帮助我们发现问题,减少问题发生的概率
- 使用单元测试可以在不污染数据库数据的情况下,来测试某项功能
3.Spring Boot 单元测试使用
Spring Boot 项目创建时会默认单元测试框架 spring-boot-test,而这个单元测试框架主要是依靠另⼀ 个著名的测试框架 JUnit 实现的,打开 pom.xml 就可以看到,以下信息是 Spring Boot 项目创建是自动添加的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
3.1 生成单元测试的类
class UserMapperTest {
void getUserById() {
}
}
3.2 添加 Spring Boot 框架测试注解:@SpringBootTest
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 添加单元测试业务逻辑
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
@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 |