package com.studentmanagement; import com.studentmanagement.controller.StudentController; import com.studentmanagement.model.Student; import com.studentmanagement.exception.StudentNotFoundException; import com.studentmanagement.exception.DuplicateStudentException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.List; import static org.junit.jupiter.api.Assertions.*; /** * 学生管理系统测试类 * 测试Model和Controller层的核心功能 */ public class StudentManagementTest { private StudentController controller; @BeforeEach void setUp() { // 每个测试方法执行前初始化控制器 controller = new StudentController(); } @Test void testGetAllStudents() { // 测试获取所有学生 List students = controller.getAllStudents(); assertNotNull(students); // 初始数据有3个学生 assertTrue(students.size() >= 3); } @Test void testGetStudentById_Found() throws StudentNotFoundException { // 测试根据ID查找存在的学生 Student student = controller.getStudentById(1); assertNotNull(student); assertEquals(1, student.getId()); assertEquals("张三", student.getName()); } @Test void testGetStudentById_NotFound() { // 测试根据ID查找不存在的学生 assertThrows(StudentNotFoundException.class, () -> { controller.getStudentById(999); }); } @Test void testAddStudent_Success() throws DuplicateStudentException { // 测试添加新学生成功 Student newStudent = new Student(10, "测试学生", 22, "软件工程", 88.0); controller.addStudent(newStudent); // 验证学生是否添加成功 try { Student addedStudent = controller.getStudentById(10); assertNotNull(addedStudent); assertEquals("测试学生", addedStudent.getName()); } catch (StudentNotFoundException e) { fail("学生添加失败,找不到添加的学生"); } } @Test void testAddStudent_Duplicate() throws DuplicateStudentException { // 测试添加重复ID的学生 Student student1 = new Student(20, "重复测试1", 23, "数据库", 92.0); controller.addStudent(student1); // 尝试添加相同ID的学生 Student student2 = new Student(20, "重复测试2", 24, "网络", 85.0); assertThrows(DuplicateStudentException.class, () -> { controller.addStudent(student2); }); } @Test void testUpdateStudent_Success() throws StudentNotFoundException, DuplicateStudentException { // 先添加一个学生用于测试更新 Student student = new Student(30, "待更新学生", 20, "Java基础", 75.0); controller.addStudent(student); // 更新学生信息 Student updatedStudent = new Student(30, "已更新学生", 21, "Java高级", 85.0); controller.updateStudent(updatedStudent); // 验证更新是否成功 Student retrievedStudent = controller.getStudentById(30); assertEquals("已更新学生", retrievedStudent.getName()); assertEquals(21, retrievedStudent.getAge()); assertEquals("Java高级", retrievedStudent.getCourse()); assertEquals(85.0, retrievedStudent.getGrade()); } @Test void testUpdateStudent_NotFound() { // 测试更新不存在的学生 Student student = new Student(999, "不存在的学生", 22, "测试课程", 80.0); assertThrows(StudentNotFoundException.class, () -> { controller.updateStudent(student); }); } @Test void testDeleteStudent_Success() throws StudentNotFoundException, DuplicateStudentException { // 先添加一个学生用于测试删除 Student student = new Student(40, "待删除学生", 22, "测试课程", 78.0); controller.addStudent(student); // 删除学生 controller.deleteStudent(40); // 验证删除是否成功 assertThrows(StudentNotFoundException.class, () -> { controller.getStudentById(40); }); } @Test void testDeleteStudent_NotFound() { // 测试删除不存在的学生 assertThrows(StudentNotFoundException.class, () -> { controller.deleteStudent(999); }); } @Test void testGetStudentsByCourse() { // 测试根据课程查找学生 List javaStudents = controller.getStudentsByCourse("Java编程"); assertNotNull(javaStudents); // 初始数据中应该有一个Java编程的学生 assertTrue(javaStudents.size() >= 1); // 验证所有返回的学生都是Java编程课程 for (Student student : javaStudents) { assertTrue(student.getCourse().equalsIgnoreCase("Java编程")); } } @Test void testGetStudentsByGradeAbove() { // 测试查找成绩高于指定分数的学生 List highGradeStudents = controller.getStudentsByGradeAbove(88.0); assertNotNull(highGradeStudents); // 验证所有返回的学生成绩都高于等于88.0 for (Student student : highGradeStudents) { assertTrue(student.getGrade() >= 88.0); } } @Test void testCalculateAverageGradeByCourse() { // 测试计算课程平均成绩 double avgGrade = controller.calculateAverageGradeByCourse("Java编程"); // 初始数据中Java编程的学生成绩为85.5 assertTrue(avgGrade > 0); } @Test void testCalculateAverageAge() { // 测试计算平均年龄 double avgAge = controller.calculateAverageAge(); assertTrue(avgAge > 0); } }