# 武术比赛评分系统 - 测试规划文档
## 一、测试现状分析
### 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