5.5 KiB
5.5 KiB
测试改进进度报告 (续)
日期: 2026-02-06 会话: 续前会话
本次新增测试
1. 激励模块 Repository 测试
IncentiveRecordRepositoryTest (4个测试)
- ✅
shouldFindByDateBetween- 根据日期范围查询激励记录 - ✅
shouldFindByEmployeeIdAndDateBetween- 根据员工ID和日期范围查询 - ✅
shouldFindByType- 根据类型查询激励记录 - ✅
shouldCalculateTotalAmountByEmployeeAndDateRange- 计算员工在指定日期范围内的总金额
新增功能:
- 为
IncentiveRecordRepository添加了sumAmountByEmployeeIdAndDateBetween方法 - 使用
@Query注解实现金额汇总查询 - 使用
COALESCE处理 NULL 值
修复问题:
- BigDecimal 比较问题:从
isEqualTo改为isEqualByComparingTo以忽略 scale 差异
2. KPA 模块 Repository 测试
KpaRecordRepositoryTest (3个测试)
- ✅
shouldFindByYearAndMonth- 根据年月查询 KPA 记录 - ✅
shouldFindByYear- 根据年份查询 KPA 记录 - ✅
shouldFindByYearAndMonthAndTitle- 根据年月标题查询 KPA 记录
KpaEmployeeScoreRepositoryTest (2个测试)
- ✅
shouldFindByKpaRecordId- 根据 KPA 记录ID查询员工得分 - ✅
shouldFindByEmployeeId- 根据员工ID查询<E69FA5><E8AFA2><EFBFBD>分记录
修复问题:
- 移除了不存在的
setCreatedTime()调用 (KpaRecordEntity 没有此字<E6ADA4><E5AD97><EFBFBD>) - 添加
@ContextConfiguration(classes = JunboApplication.class)解决 Spring Boot 配置类查找问题
技术改进
1. Repository 方法增强
// IncentiveRecordRepository.java
@Query("SELECT COALESCE(SUM(i.amount), 0) FROM IncentiveRecordEntity i " +
"WHERE i.employee.id = :employeeId " +
"AND i.date BETWEEN :startDate AND :endDate")
BigDecimal sumAmountByEmployeeIdAndDateBetween(
@Param("employeeId") Long employeeId,
@Param("startDate") LocalDate startDate,
@Param("endDate") LocalDate endDate);
2. 深层包结构测试配置
对于 info.panli.junbo.xxx.repository 这样的深层包结构,@DataJpaTest 无法自动找到 @SpringBootApplication,需要显式配置:
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ContextConfiguration(classes = JunboApplication.class) // 必须添加
@DisplayName("Repository 测试")
class XxxRepositoryTest {
// ...
}
统计总结
本次新增
-
新增测试文件: 3个
IncentiveRecordRepositoryTest.javaKpaRecordRepositoryTest.javaKpaEmployeeScoreRepositoryTest.java
-
新增测试方法: 9个 (4 + 3 + 2)
-
新增 Repository 方法: 1个
IncentiveRecordRepository.sumAmountByEmployeeIdAndDateBetween()
累计进度 (从上次会话继续)
| 指标 | 之前数值 | 当前数值 | 增量 |
|---|---|---|---|
| 总测试数 | 584 | 593 | +9 |
| Repository 测试 | 10 | 19 | +9 |
| 测试文件数 | ~80 | ~83 | +3 |
遗留问题
- ✅ 已解决: IncentiveRecordRepository 缺少
sumAmountByEmployeeIdAndDateBetween方法 - ✅ 已解决: BigDecimal 比较 scale 不一致问题
- ✅ 已解决: KpaRecordEntity 误用不存在的
createdTime字段 - ✅ 已解决: 深层包结构的
@DataJpaTest配置类查找问题
下一步计划
-
✅ Repository 层测试 (进行中)
- ✅ IncentiveRecordRepository (4/4)
- ✅ KpaRecordRepository (3/3)
- ✅ KpaEmployeeScoreRepository (2/2)
- ⏳ SignRecordRepository (待添加)
- ⏳ LeaveRecordRepository (待添加)
- ⏳ WorkCalendarRepository (待添加)
- ⏳ SprintRepository (待添加)
- ⏳ StoryRepository (待添加)
- ⏳ StoryMemberRepository (待添加)
-
⏳ API 层测试 (部分完成)
- ✅ OrganizationController (13/13)
- ✅ AttendanceController (6/6)
- ✅ CalendarController (8/8)
- ✅ SyncController (6/6)
- ⏳ IncentiveController (0/~10)
- ⏳ KpaController (0/~10)
- ⏳ SprintController (0/~15)
-
⏳ Service 层测试 (未开始)
- ⏳ KpaService
- ⏳ IncentiveService
- ⏳ SprintStoryService
-
⏳ 覆盖率提升
- 当前: 49% instruction, 62.6% line
- 目标: 60%+ instruction
技术要点总结
BigDecimal 比较
// ❌ 错误:strict equality (考虑 scale)
assertThat(total).isEqualTo(new BigDecimal("2500.00")); // 2500 != 2500.00
// ✅ 正确:数值比较 (忽略 scale)
assertThat(total).isEqualByComparingTo(new BigDecimal("2500.00")); // 2500 == 2500.00
深层包结构的 @DataJpaTest 配置
// 浅层包 (与 @SpringBootApplication 同级或子级1-2层): 无需配置
package info.panli.junbo.repository;
@DataJpaTest // 自动找到 info.panli.junbo.JunboApplication
class XxxRepositoryTest {}
// 深层包 (子级3层以上): 需要显式配置
package info.panli.junbo.xxx.repository;
@DataJpaTest
@ContextConfiguration(classes = JunboApplication.class) // 必须添加
class XxxRepositoryTest {}
自定义 Repository 查询方法
// 方法命名查询 (简单场景)
List<Entity> findByFieldName(Type value);
// @Query 查询 (复杂场景、聚合函数)
@Query("SELECT COALESCE(SUM(e.amount), 0) FROM Entity e WHERE e.field = :param")
BigDecimal sumAmountByField(@Param("param") Type value);
总结: 本次会话成功添加了 9 个 Repository 层测试,覆盖激励和 KPA 两个模块。修复了4个技术问题,建立了深层包结构测试的配置模式。下一步继续添加更多 Repository 测试以提升覆盖率。