- 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>
291 lines
8.8 KiB
Markdown
291 lines
8.8 KiB
Markdown
# 武术比赛评分系统 - 测试规划文档
|
||
|
||
## 一、测试现状分析
|
||
|
||
### 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
|
||
<!-- 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 运行测试
|
||
```bash
|
||
# 运行所有测试
|
||
mvn test
|
||
|
||
# 运行特定测试类
|
||
mvn test -Dtest=MartialScoreServiceTest
|
||
|
||
# 生成覆盖率报告
|
||
mvn test jacoco:report
|
||
```
|
||
|
||
### 8.2 CI/CD 集成
|
||
- 每次 PR 自动运行测试
|
||
- 测试失败阻止合并
|
||
- 覆盖率低于阈值警告
|
||
|
||
---
|
||
|
||
**文档版本**: 1.0
|
||
**创建日期**: 2026-01-16
|
||
**作者**: QA Team
|