🍎一.单元测试
🍒1.1 什么是单元测试?
单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试
单元测试是开发者编写的⼀⼩段代码,⽤于检验被测代码的⼀个很⼩的、很明确的(代码)功能是否正确。执⾏单元测试就是为了证明某段代码的执⾏结果是否符合我们的预期。如果测试结果符合我们的预期,称之为测试通过,否则就是测试未通过(或者叫测试失败)
🍒1.2 单元测试好处
- 可以⾮常简单、直观、快速的测试某⼀个功能是否正确
(可以搭配日志打印)
- 使⽤单元测试可以帮我们在打包的时候,发现⼀些问题,因为在打包之前,所以的单元测试必须通过,否则不能打包成功
(不用手动测试)
- 使⽤单元测试,在测试功能的时候,可以不污染连接的数据库,也就是在不对数据库进⾏任何改变的情况下,测试功能
(有事务回滚机制)
🍒1.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>
如果pom.xml文件内没有我们可以手动添加
🍒1.4 单元测试实现
在我们创建的XXXMapper接口中
@Slf4j注解 打印日志
@Resource注解进行UserMapper属性注入
🍒1.5 断言
import com.example.demo.model.User; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; @SpringBootTest class UserControllerTest { @Resource private UserController userController; @Test void save() { User user = new User(); user.setId(1); user.setName("Java Test"); user.setPassword("123"); boolean result = userController.save(user); // 使⽤断⾔判断最终的结果是否符合预期 Assertions.assertEquals(true, result); // Assertions.assertTrue(result); } }
🍎二.MyBatis修改操作
UserMapper接口修改用户信息方法:
UserMapper.xml 进行SQL修改用户信息语句传输:
单元测试:
单元测试结果:
🍎三.MyBatis删除操作
UserMapper接口删除用户信息方法:
// 删除方法{根据id删除这一条数据} public int del(@Param("id") Integer id);
UserMapper.xml 进行SQL删除用户信息语句传输:
<!-- 根据用户id删除用户 --> <delete id="del"> delete from userinfo where id=#{id} </delete>
单元测试:
@Test @Transactional void del() { int result = userMapper.del(2); System.out.println(result); }
单元测试解结果:
🍎四.MyBatis增加操作
🍒4.1 MyBatis增加操作
UserMapper接口增加用户信息方法:
// 添加方法 public int add(UserInfo userInfo);
UserMapper.xml 进行SQL增加用户信息语句传输:
<!-- 添加用户,返回受影响的行数 --> <insert id="add"> insert into userinfo(username,password,photo) values(#{username},#{password},#{photo}) </insert>
单元测试:'
@Test void add() { UserInfo userInfo = new UserInfo(); userInfo.setUsername("王五"); userInfo.setPassword("123"); userInfo.setPhoto("default.png"); int result = userMapper.add(userInfo); System.out.println(result); }
单元测试解结果:'
🍒4.2 MyBatis增加操作(返回自增id)
默认情况下返回的是受影响的⾏号,如果想要返回⾃增 id,具体实现如下
UserMapper接口增加用户信息方法:'
// 添加方法 // 添加用户返回受影响的行数 public int addGetId(UserInfo userInfo);
UserMapper.xml 进行SQL增加用户信息语句传输:
●useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键 (⽐如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的⾃动递增字段),默认值:false ●keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert 语句的 selectKey ⼦元素设置它的值, 默认值:未设置(unset)。如果⽣成列不⽌⼀个,可以⽤逗号分隔多个属性名称
<!-- 添加用户,返回受影响的行数和自增id --> <insert id="addGetId" useGeneratedKeys="true" keyProperty="id"> insert into userinfo(username,password,photo) values(#{username},#{password},#{photo}) </insert>
单元测试:
@Test void addGetId() { UserInfo userInfo = new UserInfo(); userInfo.setUsername("王五"); userInfo.setPassword("123"); userInfo.setPhoto("default.png"); System.out.println("添加之前 user id:" + userInfo.getId()); int result = userMapper.addGetId(userInfo); System.out.println("受影响的行数:" + result); System.out.println("添加之后 user id:" + userInfo.getId()); }
单元测试解结果: