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 testTests 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。