---
date: 2026-05-08
type: backend-internal
module: hl-user-service/test, hl-common-redis/cache
priority: low
notify: []
status: tested-passed
restart_service: hl-common-redis (随 mp-service / user-service / 任何引用方升级)
gitea_pr: [1879, 1881]
gitea_issue: [1853]
gitea_issue_open: [1860, 1880]
---

# 测试 stub 修复 + 缓存反向索引诊断日志(前端无感)

两个内部改动汇总, **不影响任何接口字段/路径/行为, 前端无需配合**。

## PR #1879 - InternalUserControllerTest stub 切到 default 方法路径 (Closes #1853)

### 现象 / 根因
PR #1814 把 `InternalUserController.getAdminsByRoleKey` 用到的 3 个 mapper 方法改为 default 方法实现:
- `SysRoleMapper.selectByRoleKey(String)`
- `AdminUserRoleMapper.selectByRoleId(Long)`
- `AdminUserMapper.selectActiveWithWechatByAdminIds(Collection)`

旧 stub `when(mapper.selectOne(any(LambdaQueryWrapper.class)))` 在 Mockito 默认配置下不进 default 方法 body, 导致 5 个 `getAdminsByRoleKey_*` case fail。

### 修复
3 个 mapper stub 全切到 default 方法本身, verify never 路径同步切签名。

### 工单偏差
工单原描述说 DesignerProfileServiceTest / DesignerServiceTest 也是同根因。**核实不是**, 这俩 Service 生产代码仍在用 LambdaQueryWrapper, 原 stub 工作正常, 未触碰。

### 残留另起工单
ServiceMonitorServiceTest 2 个 pre-existing failure (L:63, L:102) 与本工单无关, 已起 #1880 跟进。

## PR #1881 - putWithDeps SMEMBERS 自检 + ERROR stack (Refs #1860 Stage 1)

### 背景
PR #1855 / #1858 banner / dict / featuredReview hotfix 后, `DependencyAwareCacheManager` 反向索引 SADD 在 prod 仍有「总依赖=0, 实际删除=0」现象, 但日志 silent 看不出根因。

### Stage 1 改动(仅诊断)
**不动业务逻辑、不动 MpCacheAspect、不调 invalidateSource 主路径, 仅加日志。**

1. `putWithDeps` 入口 INFO 日志: key/deps/ttlSec
2. `registerDeps` 每个 dep Lua 完成后立即 **SMEMBERS 自检**, INFO 输出 isMember + indexSize
3. `invalidateSource` 把成员快照(members=[...])打出来
4. 序列化失败 / SET 失败 log.warn → log.error + stack trace

业务降级语义零变化(仍 return 不抛), 仅日志级别+stack 提级。

### 后续 Stage 2(待 prod 日志暴露根因)
- 看到 `[cache-deps registerDeps OK] isMember=false` → SADD 静默失败, 修 Lua 路径
- 看到 `序列化失败` ERROR + stack → 改 `MpCacheAspect` 缓存 result.getData()
- mp-service 完全没出现 `[cache-deps putWithDeps 开始]` → 修 aspect 上游

### 工单状态
**#1860 保持 open**, 验收 4 项中第 1 条已勾, 第 3 条「prod 日志总依赖>=1」需 prod 部署后实测才能勾。
**#1861 (D5 删 MpCacheEvict 重构) 继续阻塞**至 #1860 完全闭环。

## 测试

- PR #1879: `mvn -pl hl-user-service test`, IUT 5 case 全过
- PR #1881: `mvn -pl hl-common/hl-common-redis test`, 47/0/0 (新增 4 case)

## 重启服务

- `hl-user-service`(测试 stub 改动只影响单测, 但合 dev 后建议 deploy panel 部署一次)
- `hl-common-redis` 是公共模块, 实际部署需要 `mp-service` / `user-service` / `product-v2` / `order-v2` / `resource-service` 任何用到 `DependencyAwareCacheManager` 的服务都升级才生效

## 关联

- Closes wx/HL #1853 (PR #1879)
- Refs wx/HL #1860 Stage 1 (PR #1881, 工单不在本 PR 关闭)
- 起 #1880 (ServiceMonitor failure follow-up)
- 阻塞 #1861 (D5 重构, 等 #1860 Stage 2)
