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.
170 lines
5.8 KiB
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);
|
|
}
|
|
} |