- Google Standard: MartialScoreServiceImplTest, MartialResultServiceImplTest, MartialSchedulePlanServiceImplTest - Apple Standard: MartialScoreServiceAppleTest, MartialResultServiceAppleTest - Alibaba Standard: MartialScoreServiceAliTest, MartialResultServiceAliTest - OpenAI Standard: MartialScoreServiceOpenAITest, MartialResultServiceOpenAITest (Property-Based, Fuzzing, Invariant, Regression, Contract tests) - Add TEST_PLAN.md documentation - Update pom.xml with maven-surefire-plugin 3.2.5 Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
8.8 KiB
8.8 KiB
武术比赛评分系统 - 测试规划文档
一、测试现状分析
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 测试类型
-
单元测试 (Unit Tests)
- 使用 Mockito 模拟依赖
- 测试业务逻辑正确性
- 测试边界条件和异常处理
-
集成测试 (Integration Tests)
- 使用 @SpringBootTest
- 测试数据库交互
- 测试事务处理
-
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模式)
@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 建议添加
<!-- AssertJ - 流式断言 -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<!-- Testcontainers - 集成测试 -->
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<scope>test</scope>
</dependency>
<!-- JaCoCo - 覆盖率报告 -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
八、执行和报告
8.1 运行测试
# 运行所有测试
mvn test
# 运行特定测试类
mvn test -Dtest=MartialScoreServiceTest
# 生成覆盖率报告
mvn test jacoco:report
8.2 CI/CD 集成
- 每次 PR 自动运行测试
- 测试失败阻止合并
- 覆盖率低于阈值警告
文档版本: 1.0
创建日期: 2026-01-16
作者: QA Team