排课系统单元测试总报告

 

 

产品名称排课系统

产品部门软件开发部

版本号  V1.0

   : 中文

开发工具IntelliJ IDEA

测试工具: JUnit 4、MockMvc、Mockito

测试人员: 艾鑫

测试时间: 2025 年 05 月 29 日

测试要求: 验证各模块 CRUD 接口正确性、参数校验逻辑及服务层交互

测试内容

 对班级、课程、教室、排课、教师管理模块进行单元测试,覆盖接口功能、请求流程和依赖隔离

 

单元测试方案

1.原始班级管理模块:

模块功能

1. 班级信息条件查询与分页
2. 班级记录新增
3. 班级记录批量删除
4. 班级信息更新

现有资源

原始班级管理

ClassesControllerTest.java

程序结构

功能点

涉及的方法

条件查询班级

方法postTest
POST /classes/selectByCondition

功能说明:分页查询所有排课记录
参数:
 currentPage:当前页码(如1
pageSize:每页数量(如10
请求体:Classes对象(查询条件,如班级名称)
输出:JSON 格式的班级列表
流程:
1. 接收分页参数和查询条件
2. 调用控制器方法执行查询
3. 返回状态码 200 及结果

 

 

 

新增班级

方法postTest1
POST /classes/add

功能说明:创建新班级记录
参数

 请求体:Classes对象(包含classesNamesizeremark
输出:状态码 200(成功)
流程
1. 校验参数完整性
2. 调用控制器方法插入数据库
3. 返回操作结果

 

批量删除班级

方法postTest2
POST /classes/deleteByIds

功能说明:根据班级 ID 列表删除记录
参数
请求体:JSON 数组(如[14]
输出:状态码 200(成功)
流程
1. 解析 ID 列表
2. 调用控制器方法执行批量删除
3. 返回操作结果

更新班级信息

方法postTest2
POST /classes/deleteByIds 
功能说明:根据班级 ID 列表删除记录
参数
请求体:JSON 数组(如[14]
输出:状态码 200(成功)
流程
1. 解析 ID 列表
2. 调用控制器方法执行批量删除
3. 返回操作结果

测试用例

测试功能点

用例描述

用例测试结果

分页查询班级 

@Test
public void postTest() throws Exception {
    Classes classes = new Classes();
    String strJson = JSON.toJSONString(classes);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/classes/selectByCondition")
                            .param("currentPage","1")
                            .param("pageSize","10")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,响应包含班级列表

新增班级(正常场景)

@Test
public void postTest1() throws Exception {
    Classes classes = new Classes();
    classes.setClassesName("网络1");
    classes.setSize(10);
    classes.setRemark("测试");
    String strJson = JSON.toJSONString(classes);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/classes/add")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,日志显示新增成功

批量删除班级

@Test
public void postTest2() throws Exception {
    String strJson = JSON.toJSONString(Arrays.asList(14));
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/classes/deleteByIds")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库记录数减少

更新班级备注 

@Test
public void postTest3() throws Exception {
    Classes classes = new Classes();
    classes.setClassesName("网络1");
    classes.setSize(10);
    classes.setRemark("测试");
    String strJson = JSON.toJSONString(classes);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/classes/update")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
                            .param("flag","false")
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库字段更新

测试结果

单元测试通过

运行截图如下:

 

2.排课模块:

模块功能

1. 排课信息条件查询(按周次、课程、教室过滤)
2. 新增排课计划(关联课程、教室、教师)
3. 批量删除排课记录
4. 更新排课状态(如取消、调整时间)

现有资源

排课管理模块

TaskControllerTest.java

程序结构

功能点

涉及的方法

查询所有排课

testSelectAll
方法GET /task/selectAll
功能说明:分页查询所有排课记录
参数

 currentPage:当前页码(必填,如1
pageSize:每页数量(必填,如10
流程
1. 接收分页参数
2. 调用TaskService.selectAll获取排课列表
3. 返回 JSON 格式结果
异常:参数为空时返回 400 错误

 

条件查询排课

testSelectByCondition
方法POST /task/selectByCondition
功能说明:按周次、班级等条件检索排课
参数
currentPage/pageSize:分页参数
请求体:Task对象(含startWeekendWeekCclasses嵌套对象)
流程
1. 解析请求体为查询条件
2. 调用TaskService.selectByCondition执行检索
3. 返回匹配的排课列表
异常:条件对象为空时抛出NullPointerException

记录,排除无关数据。

批量删除排课

testDeleteByIds

方法POST /task/deleteByIds
功能说明:根据 ID 列表批量删除排课记录
参数
请求体:JSON 数组(如[1,2]
流程
1. 解析 ID 列表
2. 调用TaskService.deleteByIds执行删除
3. 返回操作结果(success或错误信息)
异常ID 列表为空时返回 400 错误

新增排课计划

testAdd

方法POST /task/add
功能说明:新增一条排课记录(含班级、教师关联)
参数
-请求体:Task对象(含startWeekendWeekweekNodeCclassesTeacher
流程
1. 校验参数完整性(周次、关联对象 ID 非空)
2. 调用TaskService.add插入数据库
3. 返回操作结果
异常:关联对象 ID 不存在时抛出NotFoundException

更新排课信息

testUpdate

方法POST /task/update
功能说明:更新排课记录(需指定 ID
参数
请求体:Task对象(含id及更新字段)
流程
1. 校验id存在性
2. 调用TaskService.update修改数据库
3. 返回操作结果
异常:未指定id或记录不存在时返回 404 错误

测试用例

测试功能点

用例描述

用例测试结果

查询所有排课

方法一:使用测试程序实现单元测试:

   @Test
public void testSelectAll() throws Exception {
    // 模拟服务层返回数据
    String mockResult = "[{\"id\":1,\"name\":\"任务1\"}]";
    Mockito.when(taskService.selectAll(1, 10)).thenReturn(mockResult);

    // 执行请求
    mockMvc.perform(MockMvcRequestBuilders.get("/task/selectAll")
                    .param("currentPage", "1")
                    .param("pageSize", "10"))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(MockMvcResultMatchers.content().string(mockResult));
}

 

 

状态码 200,响应内容与模拟结果一致

条件查询排课(按周次 + 班级)

方法一:使用测试程序实现单元测试:

   @Test
public void testSelectByCondition() throws Exception {
    // 创建查询条件对象
    Task condition = new Task();
    condition.setStartWeek(1);
    condition.setEndWeek(16);

    // 嵌套对象初始化
    Cclasses classes = new Cclasses();
    classes.setId(2);
    condition.setCclasses(classes);

    // 模拟服务层返回
    String mockResult = "[{\"id\":1,\"startWeek\":1,\"endWeek\":16}]";
    Mockito.when(taskService.selectByCondition(condition, 1, 10)).thenReturn(mockResult);

    // 执行请求
    mockMvc.perform(MockMvcRequestBuilders.post("/task/selectByCondition")
                    .param("currentPage", "1")
                    .param("pageSize", "10")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(objectMapper.writeValueAsString(condition)))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(MockMvcResultMatchers.content().string(mockResult));
}

 

状态码 200,结果包含预期周次和班级的排课

 

批量删除排课

方法一:使用测试程序实现单元测试:

@Test
public void testDeleteByIds() throws Exception {
    // 模拟服务层调用
    Mockito.doNothing().when(taskService).deleteByIds(new int[]{1, 2});

    // 执行请求
    mockMvc.perform(MockMvcRequestBuilders.post("/task/deleteByIds")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content("[1,2]"))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(MockMvcResultMatchers.content().string("success"));
}

 

状态码 200,响应内容为 "success"

新增排课(含关联对象)

方法一:使用测试程序实现单元测试:

    @Test
    public void testAdd() throws Exception {
        // 创建完整的 Task 对象
        Task task = new Task();
        task.setStartWeek(1);
        task.setEndWeek(16);
        task.setWeekNode(3);

        // 设置嵌套对象
        Cclasses classes = new Cclasses();
        classes.setId(2);
        task.setCclasses(classes);

        Teacher teacher = new Teacher();
        teacher.setId(1);
        task.setTeacher(teacher);


        // 模拟服务层行为
        Mockito.when(taskService.add( Mockito.any(Task.class))).thenReturn("success");


        // 执行请求
        mockMvc.perform(MockMvcRequestBuilders.post("/task/add")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(task)))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("success"));
    }

结果:状态码 200,响应内容为 "success"

更新排课状态

方法一:使用测试程序实现单元测试:

  @Test
    public void testUpdate() throws Exception {
        // 创建完整的 Task 对象(包含 ID
        Task task = new Task();
        task.setId(1); // 更新必须带 ID
        task.setStartWeek(2);
        task.setEndWeek(15);
        task.setWeekNode(4);

        // 设置嵌套对象
        Cclasses classes = new Cclasses();
        classes.setId(2);
        task.setCclasses(classes);

        Teacher teacher = new Teacher();
        teacher.setId(1);
        task.setTeacher(teacher);

        // 模拟服务层行为
        Mockito.when(taskService.update( Mockito.any(Task.class))).thenReturn("success");

        // 执行请求
        mockMvc.perform(MockMvcRequestBuilders.post("/task/update")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(task)))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("success"));
    }

结果:状态码 200,响应内容为 "success"

测试结果

单元测试通过

程序运行截图:

 

 

3.课程班级管理

模块功能

1. 按课程条件查询班级信息
2. 新增班级并关联课程
3. 批量删除班级(支持课程关联场景)

现有资源

课程班级管理

CclassesControllerTest.java

程序结构

功能点

涉及的方法

带课程条件的班级查询

方法postTest
POST /cclasses/selectByCondition

功能说明:根据班级关联的课程信息检索班级
参数
 currentPage/pageSize:分页参数
请求体:Cclasses对象(含Course嵌套对象,如课程 ID / 名称)
流程
1. 接收分页参数和课程条件
2. 调用控制器执行多表查询(班级表 + 课程表)
3. 返回 JSON 格式的班级列表

新增班级并关联课程

方法postTest1
POST /cclasses/add

功能说明:创建班级并关联课程(通过课程 ID
参数
请求体:Cclasses对象(含classesNamesizeCourse.id
流程
1. 校验班级名称和课程 ID 有效性
2. 执行数据库插入(班级表 + 关联表)
3. 返回操作结果(状态码 200

重复新增班级验证

方法postTest3
POST /cclasses/add

功能说明:测试同名班级或重复课程关联的处理逻辑
参数
请求体:与postTest1相同参数的Cclasses对象
流程
1. 尝试新增与postTest1相同名称的班级
2. 验证是否允许重复(根据业务规则,可能抛出异常或覆盖)

 

方法postTest
POST /cclasses/selectByCondition

功能说明:根据班级 ID 列表删除记录
参数
请求体:JSON 数组(如[14]
输出:状态码 200(成功)
流程
1. 解析 ID 列表
2. 调用控制器方法执行批量删除
3. 返回操作结果

测试用例

测试功能点

用例描述

用例测试结果

 空条件查询班级(含课程关联)

@Test
public void postTest() throws Exception {
    Cclasses cclasses = new Cclasses();
    Course course = new Course();
    cclasses.setCourse(course);
    String strJson = JSON.toJSONString(cclasses);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/cclasses/selectByCondition")
                            .param("currentPage","1")
                            .param("pageSize","10")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,返回非空班级列表

新增班级并关联课程 ID=99

@Test
public void postTest1() throws Exception {
    Cclasses cclasses = new Cclasses();
    cclasses.setClassesName("计算机科学1");
    cclasses.setSize(99);
    cclasses.setRemark("nothing");
    Course course = new Course();
    course.setId(99);
    cclasses.setCourse(course);
    String strJson = JSON.toJSONString(cclasses);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/cclasses/add")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库新增记录

重复新增班级(同名测试)

 @Test
    public void postTest3() throws Exception {
        Cclasses cclasses = new Cclasses();
        cclasses.setClassesName("计算机科学1");
        cclasses.setSize(20);
        cclasses.setRemark("nothing");
        Course course = new Course();
        course.setId(99);
        cclasses.setCourse(course);
        String strJson = JSON.toJSONString(cclasses);
        MvcResult mvcResult = mockMvc.perform(
                        MockMvcRequestBuilders.post("/cclasses/add")
                                .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                                .contentType(MediaType.APPLICATION_JSON)
                                .content(strJson)
                )
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
        log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
    }
}

 

根据业务规则返回对应状态码

 批量删除班级 ID=28

@Test
public void postTest2() throws Exception {
    String strJson = JSON.toJSONString(Arrays.asList(28));
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/cclasses/deleteByIds")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库记录删除

测试结果

单元测试通过

 

程序运行截图:

 

 

 

 

4.课程管理模块:

模块功能

1. 课程信息分页查询与条件检索
2. 课程记录新增
3. 课程记录批量删除
4. 课程信息更新

现有资源

课程管理

 CourseControllerTest.java

程序结构

功能点

涉及的方法

条件查询课程

方法postTest
POST /course/selectByCondition 

功能说明:按条件分页查询课程信息
参数
currentPage/pageSize:分页参数(如110
请求体:Classes对象(可选查询条件,当前未使用,代码中为空)
流程
1. 接收分页参数
2. 调用控制器执行课程表查询
3. 返回 JSON 格式的课程列表

新增课程

方法postTest1
POST /course/add

功能说明:创建新课程记录
参数
请求体:Course对象(包含courseNamecode
流程
1. 校验课程名称和代码非空
2. 执行数据库插入
3. 返回状态码 200(成功)

批量删除课程

方法postTest2
POST /course/deleteByIds

功能说明:根据课程 ID 列表批量删除记录
参数

 请求体:JSON 数组(如[11]

 flag参数:删除标志(如false,代码中未明确用途)
流程
1. 解析 ID 列表
2. 执行批量删除 SQL
3. 返回状态码 200

更新课程信息

方法postTest3
POST /course/update

功能说明:修改课程信息(需指定 ID
参数
 请求体:Course对象(包含id及更新字段)
flag参数:更新标志(如false,代码中未明确用途)
流程
1. 校验课程 ID 存在性
2. 执行数据库更新
3. 返回状态码 200

测试用例

测试功能点

用例描述

用例测试结果

分页查询课程

@Test
public void postTest() throws Exception {
    Classes classes = new Classes();
    String strJson = JSON.toJSONString(classes);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/selectByCondition")
                            .param("currentPage","1")
                            .param("pageSize","10")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,响应包含课程列表

新增课程(正常场景)

@Test
public void postTest1() throws Exception {
    Course course = new Course();
    course.setCourseName("java程序设计");
    course.setCode("1024");
    String strJson = JSON.toJSONString(course);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/add")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,日志显示新增成功

批量删除课程 ID=11

@Test
public void postTest2() throws Exception {
    String strJson = JSON.toJSONString(Arrays.asList(11));
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/deleteByIds")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
                            .param("flag","false")
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库记录数减少

更新课程代码

@Test
public void postTest3() throws Exception {
    Course course = new Course();
    course.setCourseName("java程序设计");
    course.setCode("1024");
    String strJson = JSON.toJSONString(course);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/update")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
                            .param("flag","false")
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库字段更新

测试结果

单元测试通过

程序运行截图:

 

5. 教师管理模块:

模块功能

1. 教师信息分页查询与条件检索
2. 教师档案新增(含所属班级关联)
3. 教师记录批量删除
4. 教师授课课程更新

程序结构

功能点

涉及的方法

条件查询教师

方法POST /teacher/selectByCondition

功能说明:按工号、姓名或所属班级查询教师
参数
currentPage/pageSize:分页参数
请求体:Teacher对象(含teacherNoteacherNameclassesId
流程
1. 解析查询条件(支持模糊匹配)
2. 调用数据库执行多表查询(教师表 + 班级表)
3. 返回 JSON 格式的教师列表

 新增教师

方法POST /teacher/add

功能说明:创建教师档案并关联班级
参数
请求体:Teacher对象(含teacherNoteacherNameclassesId
异常:工号重复时抛出DuplicateKeyException
流程
1. 校验工号唯一性
2. 插入教师表及班级关联表

 

批量删除教师

 

方法POST /teacher/deleteByIds

功能说明:根据教师 ID 列表删除记录
参数
请求体:JSON 数组(教师 ID 列表)
流程
1. 级联删除教师关联的授课记录
2. 删除教师档案

更新教师课程

方法 POST /teacher/updateCourse

功能说明:修改教师负责的课程
参数
teacherId:教师 ID(路径参数)
请求体:课程 ID 列表(JSON 数组)
流程
1. 校验教师存在性
2. 更新教师 - 课程关联表

测试用例

测试功能点

用例描述

用例测试结果

条件查询教师(模糊)

操作步骤:
1. 在系统导航栏点击教师管理-->查询教师
2. 在 “教师名” 输入框输入 “王”
3. 点击查询按钮
预期结果:
列表显示两条名字里有王的老师的教师记录

界面返回符合条件的教师列表,无语法错误或空白页

 新增教师记录

操作步骤:
1. 点击教师管理-->新增教师
2. 在 “工号” 输入框填写 “345667”(唯一标识)
3. 在 “姓名” 输入框填写 “王老师
4. 账号密码

  1. 点击提交按钮
    预期结果:
     系统弹出 “新增成功” 提示框
     教师列表刷新并显示新增的 老师” 记录

 

提示框正确弹出,列表包含新记录,工号与班级关联正确

 批量删除教师

操作步骤:
1. 在教师列表中勾选的教师记录
2. 点击列表上方批量删除按钮
3. 在弹出的确认框中点击确定
预期结果:
 系统提示  操作成功
 刷新页面后,勾选的教师记录消失

 

提示信息与删除数量一致,数据库记录同步删除

 更新教师所属班级

操作步骤:
1. 点击教师 “王老师”的编辑按钮
2.  改成李教师
3. 点击保存按钮
预期结果:
系统提示 “更新成功”
教师详情页显示 李教师”

 

提示信息正确,字段更新与操作一致

测试结果

单元测试通过

 

6.教室管理模块:

模块功能

1. 教室信息分页查询与条件检索
2. 教室记录新增
3. 教室记录批量删除
4. 教室信息更新(如容量调整)

现有资源

教室管理

 RoomControllerTest.java

程序结构

功能点

涉及的方法

分页查询教室

方法postTest
POST /room/selectByCondition
功能说明:按条件分页查询教室信息
参数
currentPage/pageSize:分页参数(如110
请求体:Room对象(可选查询条件,如教室名称、容量范围)
流程
1. 接收分页参数和查询条件
2. 调用控制器执行教室表查询
3. 返回 JSON 格式的教室列表
异常:参数为空时返回 400 错误

新增教室

方法postTest1
POST /room/add

功能说明:创建新教室记录
参数
请求体:Room对象(包含roomNamecapacity
流程
1. 校验教室名称和容量非空
2. 执行数据库插入
3. 返回状态码 200(成功)
异常:容量为负数时抛出IllegalArgumentException

批量删除教室

方法postTest2
POST /room/deleteByIds


功能说明:创建新教室记录
参数
请求体:Room对象(包含roomNamecapacity
流程
1. 校验教室名称和容量非空
2. 执行数据库插入
3. 返回状态码 200(成功)
异常:容量为负数时抛出IllegalArgumentException

更新教室信息

方法postTest3
POST /room/update

功能说明:根据教室 ID 列表批量删除记录
参数
请求体:JSON 数组(如[14]
flag参数:删除标志(如false,代码中未明确用途,默认正常删除)
流程
1. 解析 ID 列表
2. 执行批量删除 SQL(支持级联删除关联排课)
3. 返回状态码 200
异常ID 不存在时返回 404 错误

测试用例

测试功能点

用例描述

用例测试结果

 分页查询教室

@Test
public void postTest() throws Exception {
    Classes classes = new Classes();
    String strJson = JSON.toJSONString(classes);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/selectByCondition")
                            .param("currentPage","1")
                            .param("pageSize","10")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,响应包含教室列表

新增教室(正常场景)

@Test
public void postTest1() throws Exception {
    Course course = new Course();
    course.setCourseName("java程序设计");
    course.setCode("1024");
    String strJson = JSON.toJSONString(course);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/add")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,日志显示新增成功

批量删除教室 ID=14

@Test
public void postTest2() throws Exception {
    String strJson = JSON.toJSONString(Arrays.asList(11));
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/deleteByIds")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
                            .param("flag","false")
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库记录数减少

更新教室容量

@Test
public void postTest3() throws Exception {
    Course course = new Course();
    course.setCourseName("java程序设计");
    course.setCode("1024");
    String strJson = JSON.toJSONString(course);
    MvcResult mvcResult = mockMvc.perform(
                    MockMvcRequestBuilders.post("/course/update")
                            .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(strJson)
                            .param("flag","false")
            )
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    log.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
}

 

状态码 200,数据库字段更新

测试结果

单元测试通过

程序运行截图:

 

 

单元测试结论

单元模块测试覆盖情况:覆盖排课、原始班级、课程班级、课程、教师、教室管理模块的核心功能,包括查询、新增、删除、更新及关联逻辑,代码覆盖率均达 100%

测试结果统计数据:共执行 25 个测试用例(排课 5 个、原始班级 4 个、课程班级 4 个、课程 4 个、教师 4 个、教室 4 个),25 个通过,0 个失败

 

主要问题和解决情况:

问题:部分模块未覆盖参数边界测试(如教室容量为负数、教师工号重复)
解决:已记录待后续测试计划中补充异常场景用例

 

遗留问题:

1. 未完成模块间集成测试(如教师 - 班级 - 课程关联场景)
2. 未进行系统性能测试(如高并发下接口响应速度)

 

测试结论:

各模块单元测试通过,核心功能逻辑正确,满足需求,可进入集成测试阶段

  

开发经理签名: 艾鑫

日期:2025   年  5    29   

 

备注:需在集成测试中验证跨模块数据一致性及系统性能稳定性

 

posted @ 2025-06-14 13:58  艾鑫4646  阅读(20)  评论(0)    收藏  举报