test: 提升ActivityController测试覆盖率 - 新增topN边界测试
- 新增3个测试覆盖topN参数的边界条件 * topN超过列表大小的场景 * topN为0的场景 * topN为负数的场景 覆盖率提升: - 总体分支覆盖率: 63.3% → 63.6% (+2个分支) - Controller包: 84% → 89% (+5%) - ActivityController: 77% → 更高 - 新增测试用例: 3个 - 距离70%目标: 还需40个分支 本次会话总成果: - 新增测试: 12个 - 分支覆盖: +7个 (404→411) - Controller包: 73% → 89% (+16%)
This commit is contained in:
@@ -94,7 +94,10 @@
|
|||||||
"Bash(git commit -m \"test: 提升Controller测试覆盖率 - 新增IP提取和分页边界测试\n\n- ShortLinkController: 新增3个测试覆盖IP地址提取逻辑\n * X-Forwarded-For头部处理\n * RemoteAddr回退逻辑\n * 空白X-Forwarded-For处理\n \n- UserExperienceController: 新增4个测试覆盖分页边界条件\n * size=0时返回空列表\n * 负数page处理\n * Math.max边界逻辑\n \n覆盖率提升:\n- 总体分支覆盖率: 62% → 63%\n- Controller包: 73% → 80% \\(+7%\\)\n- 新增测试用例: 7个\n- 距离70%目标: 还需44个分支\")",
|
"Bash(git commit -m \"test: 提升Controller测试覆盖率 - 新增IP提取和分页边界测试\n\n- ShortLinkController: 新增3个测试覆盖IP地址提取逻辑\n * X-Forwarded-For头部处理\n * RemoteAddr回退逻辑\n * 空白X-Forwarded-For处理\n \n- UserExperienceController: 新增4个测试覆盖分页边界条件\n * size=0时返回空列表\n * 负数page处理\n * Math.max边界逻辑\n \n覆盖率提升:\n- 总体分支覆盖率: 62% → 63%\n- Controller包: 73% → 80% \\(+7%\\)\n- 新增测试用例: 7个\n- 距离70%目标: 还需44个分支\")",
|
||||||
"Bash(mvn test -Dtest=ShareTrackingControllerTest 2>&1 | tail -30)",
|
"Bash(mvn test -Dtest=ShareTrackingControllerTest 2>&1 | tail -30)",
|
||||||
"Bash(mvn clean test jacoco:report 2>&1 | grep -E \"Tests run:|Total\" | tail -5)",
|
"Bash(mvn clean test jacoco:report 2>&1 | grep -E \"Tests run:|Total\" | tail -5)",
|
||||||
"Bash(git add -A && git commit -m \"test: 提升ShareTrackingController测试覆盖率\n\n- 新增2个测试覆盖时间范围和参数处理\n * getShareMetrics提供时间范围的场景\n * registerShareSource处理null参数的场景\n \n覆盖率提升:\n- 总体分支覆盖率: 63% → 63.3% \\(+2个分支\\)\n- Controller包: 80% → 84% \\(+4%\\)\n- ShareTrackingController: 70% → 更高\n- 新增测试用例: 2个\n- 距离70%目标: 还需42个分支\")"
|
"Bash(git add -A && git commit -m \"test: 提升ShareTrackingController测试覆盖率\n\n- 新增2个测试覆盖时间范围和参数处理\n * getShareMetrics提供时间范围的场景\n * registerShareSource处理null参数的场景\n \n覆盖率提升:\n- 总体分支覆盖率: 63% → 63.3% \\(+2个分支\\)\n- Controller包: 80% → 84% \\(+4%\\)\n- ShareTrackingController: 70% → 更高\n- 新增测试用例: 2个\n- 距离70%目标: 还需42个分支\")",
|
||||||
|
"Bash(mvn test -Dtest=ActivityControllerContractTest 2>&1 | tail -30)",
|
||||||
|
"Bash(mvn clean test jacoco:report 2>&1 | grep -E \"Tests run:|BUILD\" | tail -3)",
|
||||||
|
"Bash(git add -A && git commit -m \"test: 提升ActivityController测试覆盖率 - 新增topN边界测试\n\n- 新增3个测试覆盖topN参数的边界条件\n * topN超过列表大小的场景\n * topN为0的场景\n * topN为负数的场景\n \n覆盖率提升:\n- 总体分支覆盖率: 63.3% → 63.6% \\(+2个分支\\)\n- Controller包: 84% → 89% \\(+5%\\)\n- ActivityController: 77% → 更高\n- 新增测试用例: 3个\n- 距离70%目标: 还需40个分支\n\n本次会话总成果:\n- 新增测试: 12个\n- 分支覆盖: +7个 \\(404→411\\)\n- Controller包: 73% → 89% \\(+16%\\)\")"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -282,4 +282,54 @@ class ActivityControllerContractTest {
|
|||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(header().string("Content-Type", "text/csv;charset=UTF-8"));
|
.andExpect(header().string("Content-Type", "text/csv;charset=UTF-8"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldGetLeaderboard_whenTopNExceedsListSize() throws Exception {
|
||||||
|
List<LeaderboardEntry> entries = new ArrayList<>();
|
||||||
|
for (int i = 1; i <= 5; i++) {
|
||||||
|
entries.add(new LeaderboardEntry((long) i, "用户" + i, 100 - i));
|
||||||
|
}
|
||||||
|
when(activityService.getLeaderboard(1L)).thenReturn(entries);
|
||||||
|
|
||||||
|
mockMvc.perform(get("/api/v1/activities/1/leaderboard")
|
||||||
|
.param("topN", "100")
|
||||||
|
.accept(MediaType.APPLICATION_JSON)
|
||||||
|
.header("X-API-Key", TestAuthSupport.RAW_API_KEY)
|
||||||
|
.header("Authorization", "Bearer test-token"))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.code").value(200))
|
||||||
|
.andExpect(jsonPath("$.data.length()").value(5));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldGetLeaderboard_whenTopNIsZero() throws Exception {
|
||||||
|
List<LeaderboardEntry> entries = new ArrayList<>();
|
||||||
|
entries.add(new LeaderboardEntry(1L, "用户1", 100));
|
||||||
|
when(activityService.getLeaderboard(1L)).thenReturn(entries);
|
||||||
|
|
||||||
|
mockMvc.perform(get("/api/v1/activities/1/leaderboard")
|
||||||
|
.param("topN", "0")
|
||||||
|
.accept(MediaType.APPLICATION_JSON)
|
||||||
|
.header("X-API-Key", TestAuthSupport.RAW_API_KEY)
|
||||||
|
.header("Authorization", "Bearer test-token"))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.code").value(200))
|
||||||
|
.andExpect(jsonPath("$.data.length()").value(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldGetLeaderboard_whenTopNIsNegative() throws Exception {
|
||||||
|
List<LeaderboardEntry> entries = new ArrayList<>();
|
||||||
|
entries.add(new LeaderboardEntry(1L, "用户1", 100));
|
||||||
|
when(activityService.getLeaderboard(1L)).thenReturn(entries);
|
||||||
|
|
||||||
|
mockMvc.perform(get("/api/v1/activities/1/leaderboard")
|
||||||
|
.param("topN", "-1")
|
||||||
|
.accept(MediaType.APPLICATION_JSON)
|
||||||
|
.header("X-API-Key", TestAuthSupport.RAW_API_KEY)
|
||||||
|
.header("Authorization", "Bearer test-token"))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.code").value(200))
|
||||||
|
.andExpect(jsonPath("$.data.length()").value(1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user