# 武术比赛评分系统 - 测试规划文档 ## 一、测试现状分析 ### 1.1 现有测试类(4个) | 测试类 | 覆盖模块 | 测试数量 | 状态 | |--------|----------|----------|------| | MartialAthleteServiceTest | 运动员服务 | 15 | 基础 | | MartialScoreServiceTest | 评分服务 | 10 | 基础 | | MartialResultServiceTest | 成绩服务 | - | 待检查 | | MartialSchedulePlanServiceTest | 赛程计划 | - | 待检查 | ### 1.2 待测试模块(24个Service) | 优先级 | 模块 | 复杂度 | 业务重要性 | |--------|------|--------|------------| | P0 | MartialCompetitionService | 高 | 核心 | | P0 | MartialProjectService | 高 | 核心 | | P0 | MartialScoreService | 高 | 核心 | | P0 | MartialResultService | 高 | 核心 | | P0 | MartialScheduleArrangeService | 高 | 核心 | | P1 | MartialAthleteService | 中 | 重要 | | P1 | MartialRegistrationOrderService | 中 | 重要 | | P1 | MartialJudgeService | 中 | 重要 | | P1 | MartialTeamService | 中 | 重要 | | P1 | MartialVenueService | 低 | 重要 | | P2 | MartialSchedulePlanService | 中 | 一般 | | P2 | MartialScheduleAthleteService | 中 | 一般 | | P2 | MartialDeductionItemService | 低 | 一般 | | P2 | MartialExceptionEventService | 低 | 一般 | | P3 | MartialBannerService | 低 | 辅助 | | P3 | MartialInfoPublishService | 低 | 辅助 | | P3 | MartialLiveUpdateService | 低 | 辅助 | | P3 | MartialContactService | 低 | 辅助 | | P3 | MartialActivityScheduleService | 低 | 辅助 | | P3 | MartialCompetitionAttachmentService | 低 | 辅助 | | P3 | MartialCompetitionRulesService | 低 | 辅助 | | P3 | MartialJudgeInviteService | 低 | 辅助 | | P3 | MartialJudgeProjectService | 低 | 辅助 | | P3 | MartialScheduleService | 低 | 辅助 | ## 二、测试策略 ### 2.1 测试金字塔 ``` /\ / \ E2E Tests (5%) /----\ - API集成测试 / \ /--------\ Integration Tests (20%) / \ - Service层集成测试 /------------\- 数据库交互测试 / \ /----------------\ Unit Tests (75%) - Service单元测试 - 工具类测试 - 验证逻辑测试 ``` ### 2.2 测试类型 1. **单元测试 (Unit Tests)** - 使用 Mockito 模拟依赖 - 测试业务逻辑正确性 - 测试边界条件和异常处理 2. **集成测试 (Integration Tests)** - 使用 @SpringBootTest - 测试数据库交互 - 测试事务处理 3. **API测试 (Controller Tests)** - 使用 MockMvc - 测试请求/响应格式 - 测试权限验证 ## 三、测试规范 ### 3.1 命名规范 ``` 测试类命名: {被测类名}Test.java - 单元测试 {被测类名}IntegrationTest.java - 集成测试 {Controller名}ApiTest.java - API测试 测试方法命名: test_{方法名}_{场景}_{预期结果}() 示例: test_calculateScore_validInput_returnsCorrectScore() test_submitScore_duplicateSubmit_throwsException() ``` ### 3.2 测试结构 (AAA模式) ```java @Test @DisplayName("描述测试场景") void test_methodName_scenario_expectedResult() { // Arrange - 准备测试数据 // Act - 执行被测方法 // Assert - 验证结果 } ``` ### 3.3 断言规范 - 使用 AssertJ 或 JUnit5 断言 - 每个测试方法只测试一个场景 - 断言信息要清晰明确 ## 四、实施计划 ### Phase 1: P0 核心模块测试 (Week 1) | 任务 | 测试类 | 测试用例数 | 状态 | |------|--------|------------|------| | 1.1 | MartialCompetitionServiceTest | 20+ | 待开发 | | 1.2 | MartialProjectServiceTest | 15+ | 待开发 | | 1.3 | MartialScoreServiceTest | 25+ | 增强 | | 1.4 | MartialResultServiceTest | 20+ | 增强 | | 1.5 | MartialScheduleArrangeServiceTest | 30+ | 待开发 | ### Phase 2: P1 重要模块测试 (Week 2) | 任务 | 测试类 | 测试用例数 | 状态 | |------|--------|------------|------| | 2.1 | MartialAthleteServiceTest | 25+ | 增强 | | 2.2 | MartialRegistrationOrderServiceTest | 20+ | 待开发 | | 2.3 | MartialJudgeServiceTest | 15+ | 待开发 | | 2.4 | MartialTeamServiceTest | 15+ | 待开发 | | 2.5 | MartialVenueServiceTest | 10+ | 待开发 | ### Phase 3: P2 一般模块测试 (Week 3) | 任务 | 测试类 | 测试用例数 | 状态 | |------|--------|------------|------| | 3.1 | MartialSchedulePlanServiceTest | 15+ | 增强 | | 3.2 | MartialScheduleAthleteServiceTest | 15+ | 待开发 | | 3.3 | MartialDeductionItemServiceTest | 10+ | 待开发 | | 3.4 | MartialExceptionEventServiceTest | 10+ | 待开发 | ### Phase 4: P3 辅助模块 + 集成测试 (Week 4) | 任务 | 测试类 | 测试用例数 | 状态 | |------|--------|------------|------| | 4.1 | 辅助模块单元测试 | 50+ | 待开发 | | 4.2 | Controller API测试 | 30+ | 待开发 | | 4.3 | 集成测试 | 20+ | 待开发 | ## 五、测试用例设计 ### 5.1 MartialCompetitionServiceTest (赛事管理) ``` 创建赛事: - test_createCompetition_validData_success - test_createCompetition_duplicateCode_throwsException - test_createCompetition_invalidDateRange_throwsException - test_createCompetition_missingRequiredFields_throwsException 更新赛事: - test_updateCompetition_validData_success - test_updateCompetition_notFound_throwsException - test_updateCompetition_statusLocked_throwsException 查询赛事: - test_getCompetitionById_exists_returnsCompetition - test_getCompetitionById_notExists_returnsNull - test_listCompetitions_withPagination_returnsPage - test_listCompetitions_byStatus_filtersCorrectly 赛事状态: - test_startCompetition_validState_success - test_startCompetition_alreadyStarted_throwsException - test_endCompetition_validState_success - test_endCompetition_notStarted_throwsException 统计功能: - test_getCompetitionStats_returnsCorrectCounts - test_getTotalParticipants_calculatesCorrectly ``` ### 5.2 MartialScoreServiceTest (评分管理) ``` 提交评分: - test_submitScore_validScore_success - test_submitScore_outOfRange_throwsException - test_submitScore_duplicateSubmit_throwsException - test_submitScore_invalidJudge_throwsException - test_submitScore_invalidAthlete_throwsException 评分计算: - test_calculateFinalScore_normalCase_success - test_calculateFinalScore_removeHighLow_success - test_calculateFinalScore_withDifficultyCoefficient_success - test_calculateFinalScore_withDeductions_success 异常检测: - test_detectAnomaly_largeDeviation_flagged - test_detectAnomaly_normalDeviation_notFlagged - test_detectAnomaly_allSameScore_flagged 评分修改: - test_modifyScore_withinTimeLimit_success - test_modifyScore_exceedTimeLimit_throwsException - test_modifyScore_requiresApproval_pendingStatus ``` ### 5.3 MartialScheduleArrangeServiceTest (赛程编排) ``` 自动编排: - test_autoArrange_validInput_generatesSchedule - test_autoArrange_conflictDetection_resolvesConflicts - test_autoArrange_venueCapacity_respectsLimits - test_autoArrange_timeSlots_noOverlap 分组逻辑: - test_groupAthletes_byProject_correctGroups - test_groupAthletes_maxPerGroup_respectsLimit - test_groupAthletes_balancedDistribution_success 冲突处理: - test_detectConflict_sameAthleteOverlap_detected - test_detectConflict_venueOverbook_detected - test_resolveConflict_autoReassign_success 调整功能: - test_adjustSchedule_swapSlots_success - test_adjustSchedule_changeVenue_success - test_adjustSchedule_logChanges_recorded ``` ## 六、测试覆盖率目标 | 模块类型 | 行覆盖率 | 分支覆盖率 | 方法覆盖率 | |----------|----------|------------|------------| | P0 核心模块 | >= 80% | >= 70% | >= 90% | | P1 重要模块 | >= 70% | >= 60% | >= 85% | | P2 一般模块 | >= 60% | >= 50% | >= 80% | | P3 辅助模块 | >= 50% | >= 40% | >= 70% | | **整体目标** | **>= 70%** | **>= 60%** | **>= 85%** | ## 七、测试工具和依赖 ### 7.1 已有依赖 - JUnit 5 (Jupiter) - Mockito - Spring Boot Test ### 7.2 建议添加 ```xml org.assertj assertj-core test org.testcontainers mysql test org.jacoco jacoco-maven-plugin ``` ## 八、执行和报告 ### 8.1 运行测试 ```bash # 运行所有测试 mvn test # 运行特定测试类 mvn test -Dtest=MartialScoreServiceTest # 生成覆盖率报告 mvn test jacoco:report ``` ### 8.2 CI/CD 集成 - 每次 PR 自动运行测试 - 测试失败阻止合并 - 覆盖率低于阈值警告 --- **文档版本**: 1.0 **创建日期**: 2026-01-16 **作者**: QA Team