You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MVC/StudentManagementTest.java

170 lines
5.8 KiB

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<Student> 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<Student> 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<Student> 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);
}
}