2026-06-01-REQ-USR-004-verify.md
5.15 KB
REQ-USR-004 登录用户 — 功能测试证据(verify, round 0)
关联 spec:
docs/superpowers/specs/2026-06-01-REQ-USR-004.md阶段:后端(backend)。验证目标 = 后端单元 + 集成测试全量绿。 生成时间:2026-06-01。
1. 测试命令
| 项 | 值 |
|---|---|
| command |
mvn -B test(工作目录 backend/,对应 docs/04 § 零「后端 unit」命令 mvn -q -B test,verify 去掉 -q 以采集逐类汇总) |
| exit_code | 0 |
| 构建结果 | BUILD SUCCESS |
| passed | 125 |
| failed |
0(Failures=0, Errors=0) |
| skipped | 0 |
| failed_list |
[](无失败用例) |
注:Maven reactor 屏幕末尾的
Tests run: 88为日志被 Spring TestContext 初始化噪声截断后的部分聚合行;以target/surefire-reports/*.txt逐类报告求和为权威口径 = 125 tests / 0 fail / 0 error / 0 skip,与上游 TDD 摘要「全量 125 测试通过」一致。
2. 运行环境关键发现(影响复现)
- 本机 PATH 默认
java= OpenJDK 25.0.2(Homebrew),超出项目锁定的 Java 17 / 21(docs/04 § 零 技术栈表)。 - 在 JDK 25 下首次执行
mvn -B test:Tests run: 88, Failures: 0, Errors: 9——com.xly.erp.modules.usr.service.UsrAuthServiceImplTest的 9 个用例在setUp:54全部 error,根因为Mockito cannot mock this class: class com.xly.erp.common.security.JwtUtil(Mockito inline mock maker 在 JDK 25 下无法插桩该类)。这是运行环境 JDK 版本越界导致的工具链不兼容,非被测业务代码缺陷。 - 切换到项目锁定版本 JDK 21(
/opt/homebrew/Cellar/openjdk@21/21.0.11/.../Home,/usr/libexec/java_home -V确认已安装)后,mvn -B test全量 125 用例通过,exit_code=0,BUILD SUCCESS。 - 权威结论以项目锁定 JDK(17/21)下的运行为准:测试闸通过。建议执行环境将默认
java/JAVA_HOME固定到 JDK 17 或 21,避免 JDK 25 下 Mockito 误报。
3. 逐测试类结果(surefire-reports 求和,JDK 21)
| 测试类 | run | fail | error | skip |
|---|---|---|---|---|
| common.config.SecurityConfigTest | 2 | 0 | 0 | 0 |
| common.exception.GlobalExceptionHandlerTest | 1 | 0 | 0 | 0 |
| common.response.PageResultTest | 2 | 0 | 0 | 0 |
| common.response.ResultCodeLoginTest | 2 | 0 | 0 | 0 |
| common.response.ResultTest | 2 | 0 | 0 | 0 |
| common.security.JwtUtilTest | 1 | 0 | 0 | 0 |
| ErpApplicationTests | 1 | 0 | 0 | 0 |
| modules.usr.AuthLoginConfigIT | 1 | 0 | 0 | 0 |
| modules.usr.controller.UsrAuthControllerTest | 6 | 0 | 0 | 0 |
| modules.usr.controller.UsrUserControllerTest | 11 | 0 | 0 | 0 |
| modules.usr.dto.CreateUserDTOValidationTest | 3 | 0 | 0 | 0 |
| modules.usr.dto.LoginDTOValidationTest | 6 | 0 | 0 | 0 |
| modules.usr.dto.UpdateUserDTOValidationTest | 5 | 0 | 0 | 0 |
| modules.usr.dto.UserQueryDTOValidationTest | 5 | 0 | 0 | 0 |
| modules.usr.mapper.UsrCompanyMapperTest | 2 | 0 | 0 | 0 |
| modules.usr.mapper.UsrUserMapperPageTest | 3 | 0 | 0 | 0 |
| modules.usr.service.UsrAuthServiceImplTest | 9 | 0 | 0 | 0 |
| modules.usr.service.UsrUserServiceImplTest | 24 | 0 | 0 | 0 |
| modules.usr.UsrLoginIT | 12 | 0 | 0 | 0 |
| modules.usr.UsrUserCreateIT | 5 | 0 | 0 | 0 |
| modules.usr.UsrUserQueryIT | 13 | 0 | 0 | 0 |
| modules.usr.UsrUserUpdateIT | 6 | 0 | 0 | 0 |
| modules.usr.vo.CompanyOptionVOJsonTest | 1 | 0 | 0 | 0 |
| modules.usr.vo.LoginVOJsonTest | 1 | 0 | 0 | 0 |
| modules.usr.vo.UserVOJsonTest | 1 | 0 | 0 | 0 |
| 合计(25 类) | 125 | 0 | 0 | 0 |
4. REQ-USR-004 验收覆盖映射(spec § 7 ↔ 测试)
REQ-USR-004 专属覆盖落在以下测试类(其余为既有 USR-001/002/003 回归,全绿):
-
UsrLoginIT(12 例,ac1–ac12 端到端):正确凭据登录成功 + 返回 token/user 且不含 sPassword(ac1/11)、token 可被受保护接口接受(ac2/12)、登录更新 tLastLoginDate(ac3)、密码错误统一 40101(ac4)、账号不存在与密码错误响应完全一致(ac5)、禁用用户 40302(ac6)、参数缺失 40001(ac7)、companyId 非法 40001(ac8)、连续失败限流 42901 + 成功清零(ac9)、GET /api/usr/companies 放行全量返回(ac10)、JWT 含 exp(ac12)。 -
UsrAuthServiceImplTest(9 例):认证主流程顺序判定、防枚举、限流计数、BCrypt 比对、@Transactional 更新登录时间等 Service 单元。 -
UsrAuthControllerTest(6 例):POST /api/usr/login+GET /api/usr/companies校验与委派。 -
LoginDTOValidationTest(6)/LoginVOJsonTest(1)/CompanyOptionVOJsonTest(1)/UsrCompanyMapperTest(2)/ResultCodeLoginTest(2,含 42901)/SecurityConfigTest(2,含放行 /api/usr/companies)/AuthLoginConfigIT(1,限流配置项 5/300)。
5. 结论
- 测试闸:绿(exit_code=0,125/125 通过,0 失败 0 错误 0 跳过,BUILD SUCCESS)—— 以项目锁定 JDK 21 运行为权威口径。
- 工作树:commit 前为 clean(仅本证据文件为新增)。
- 唯一风险提示:执行宿主默认
java为越界的 JDK 25,会触发 Mockito 对JwtUtil的插桩失败(9 error);非代码缺陷,需将默认 JDK 固定为 17/21。