✏️作者:银河罐头
系列专栏:JavaEE
“种一棵树最好的时间是十年前,其次是现在”
单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。
1.可以⾮常简单、直观、快速的测试某⼀个功能是否正确。
2.可以跳过项目里的其他模块(如登录,权限验证),直接定位去测试该单元。
3.使⽤单元测试,在测试功能的时候,可以不污染连接的数据库,也就是可以不对数据库进⾏任何改 变的情况下,测试功能。
(比如我想验证"插入功能",这时候我需要向数据库中一条无用数据来验证这个功能,这样就会污染数据库)
4.使⽤单元测试可以帮我们在打包的时候,发现⼀些问题,因为在打包之前,所有的单元测试必须通 过,否则不能打包成功。
Spring Boot 项⽬创建时会默认添加单元测试框架 spring-boot-test,打开 pom.xml 就可以看到,以下信息是 Spring Boot 项⽬创建是⾃动添加的:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
@Mapper
public interface UserMapper {
List<UserEntity> getAll();
//根据 id 查询某个用户信息
UserEntity getUserById(@Param("id") Integer id);
}
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="getAll" resultType="com.example.demo.entity.UserEntity" >
select * from userinfo
select>
<select id="getUserById" resultType="com.example.demo.entity.UserEntity">
select * from userinfo where id = ${id};
select>
mapper>
来测 getUserById() 这个方法。
@SpringBootTest//表示当前单元测试的类是运行在 SpringBoot 环境中的
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void getUserById() {
UserEntity user = userMapper.getUserById(2);
System.out.println(user);
}
}
mysql> select * from userinfo;
+----+----------+----------+-------+---------------------+---------------------+-------+
| id | username | password | photo | createtime | updatetime | state |
+----+----------+----------+-------+---------------------+---------------------+-------+
| 1 | admin | admin | | 2021-12-06 17:10:48 | 2021-12-06 17:10:48 | 1 |
| 2 | zhangsan | zhangsan | | 2021-12-06 17:10:48 | 2021-12-06 17:10:48 | 1 |
+----+----------+----------+-------+---------------------+---------------------+-------+
2 rows in set (0.01 sec)
测试通过,成功查询到 id = 2 的用户的信息。
同理,可以测试 getAll() 方法:
测试通过,数据库里确实只有 2 条数据。