PART 01
PART 02
PART 03
<!-- JUnit5核心依赖(测试用例执行) -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version>
<scope>test</scope><!-- 仅在测试环境生效,打包时不包含 -->
</dependency>
<!-- JUnit5运行时依赖(让IDEA能执行测试用例) -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>package com.test;
import com.dao.StudentMapper;
import com.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
// 测试基类(所有测试类都可以继承,抽取重复代码)
publicclassBaseTest{
protected SqlSession sqlSession; // 保护级,子类可直接使用
protected StudentMapper studentMapper;
// @BeforeEach:每个测试用例执行前都会执行(初始化资源)
@BeforeEach
voidsetUp(){
// 获取SqlSession
sqlSession = MyBatisUtil.getSqlSession();
// 获取StudentMapper代理对象
studentMapper = sqlSession.getMapper(StudentMapper.class);
System.out.println("=== 测试用例开始执行 ===");
}
// @AfterEach:每个测试用例执行后都会执行(释放资源)
@AfterEach
voidtearDown(){
// 关闭SqlSession
if (sqlSession != null) {
sqlSession.close();
}
System.out.println("=== 测试用例执行结束 ===");
}
}package com.test;
import com.pojo.Student;
import org.junit.jupiter.api.Test;
importstatic org.junit.jupiter.api.Assertions.*; // 导入断言方法
import java.util.List;
import java.util.stream.Collectors;
// 学生Mapper测试类(继承BaseTest,复用资源初始化代码)
publicclassStudentMapperTestextendsBaseTest{
// 测试1:查询存在的班级(正常场景)—— 预期返回非空列表,数量正确
@Test
voidtestQueryStudentsByClass_Exist(){
// 1. 调用要测试的方法(查询高一(1)班)
List<Student> studentList = studentMapper.queryStudentsByClass("高一(1)班");
// 2. 用断言验证结果(核心!自动判断是否符合预期)
assertNotNull(studentList, "查询结果不应为空"); // 断言列表非空
assertTrue(studentList.size() > 0, "高一(1)班应存在学生"); // 断言数量>0
// 可选:打印结果,辅助查看
List<String> names = studentList.stream().map(Student::getName).collect(Collectors.toList());
System.out.println("高一(1)班学生姓名:" + names);
}
// 测试2:查询不存在的班级(边界场景)—— 预期返回空列表
@Test
voidtestQueryStudentsByClass_NotExist(){
// 1. 调用要测试的方法(查询高三(9)班,假设不存在)
List<Student> studentList = studentMapper.queryStudentsByClass("高三(9)班");
// 2. 断言验证
assertNull(studentList, "查询不存在的班级应返回空列表"); // 断言列表为空
}
// 测试3:批量删除有效学号(正常场景)—— 预期删除成功,影响行数正确
@Test
voidtestBatchDeleteStudents_ValidIds(){
// 1. 准备测试数据(要删除的学号,确保存在)
List<String> validIds = List.of("2024006", "2024007");
// 2. 调用要测试的方法
int deleteCount = studentMapper.batchDeleteStudents(validIds);
// 3. 断言验证(预期删除2条数据)
assertEquals(2, deleteCount, "批量删除有效学号应影响2行数据");
}
// 测试4:批量删除无效学号(边界场景)—— 预期删除失败,影响行数为0
@Test
voidtestBatchDeleteStudents_InvalidIds(){
// 1. 准备测试数据(不存在的学号)
List<String> invalidIds = List.of("999999", "888888");
// 2. 调用要测试的方法
int deleteCount = studentMapper.batchDeleteStudents(invalidIds);
// 3. 断言验证(预期影响0行)
assertEquals(0, deleteCount, "批量删除无效学号应影响0行数据");
}
}断言方法 | 作用 | 示例 |
|---|---|---|
assertNotNull(对象) | 断言对象不为null | assertNotNull(studentList) —— 学生列表不应为空 |
assertNull(对象) | 断言对象为null | assertNull(studentList) —— 不存在的班级应返回空列表 |
assertEquals(预期值, 实际值) | 断言实际值等于预期值(适用于数字、字符串等) | assertEquals(2, deleteCount) —— 预期删除2条数据 |
assertTrue(条件) | 断言条件为true | assertTrue(studentList.size()>0) —— 学生数量应大于0 |
PART 04
注解 | 作用 | 使用场景 |
|---|---|---|
@BeforeAll | 所有测试用例执行前执行一次(静态方法) | 初始化全局资源(比如创建测试数据库表) |
@AfterAll | 所有测试用例执行后执行一次(静态方法) | 清理全局资源(比如删除测试数据库表) |
@Disabled | 禁用某个测试用例(不执行) | 测试用例暂未完成,或某个场景暂时不需要测试 |
import org.junit.jupiter.api.BeforeAll;
publicclassStudentMapperTestextendsBaseTest{
// 所有测试用例执行前,初始化测试数据(只执行一次)
@BeforeAll
staticvoidinitTestData(){
// 示例:往学生表插入2条测试数据(实际开发中可调用Mapper方法)
System.out.println("=== 初始化测试数据 ===");
}
// 其他测试用例...
}PART 05
PART 06