Explorar o código

test(tdd): 测试负责人 0844 轮 — B-18 自修收口(HealthDimension 15/15) + 契约复验 102绿/5红 + O-1 第22轮

E2E Test Bot hai 6 días
pai
achega
1d6f97cfa0

+ 2 - 2
cfc-backend/src/test/java/com/etotem/cfc/integration/controller/HealthDimensionControllerTest.java

@@ -53,7 +53,7 @@ public class HealthDimensionControllerTest {
     void overview_missingMemberId() {
         Map<String, Object> params = new HashMap<>();
 
-        Result<HealthDimensionVO> result = controller.overview(params, 1L, 1L);
+        Result<HealthDimensionVO> result = controller.overview(params, 1L, null);
 
         assertEquals(500, result.getCode());
         assertEquals("memberId不能为空", result.getMessage());
@@ -212,7 +212,7 @@ public class HealthDimensionControllerTest {
         Map<String, Object> params = new HashMap<>();
         params.put("dimension", "growth");
 
-        Result<List<HealthDimensionVO.DimensionItem>> result = controller.history(params, 1L, 1L);
+        Result<List<HealthDimensionVO.DimensionItem>> result = controller.history(params, 1L, null);
 
         assertEquals(500, result.getCode());
         assertEquals("memberId和dimension不能为空", result.getMessage());

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
docs/tdd/orchestration/pending.md


+ 80 - 0
docs/tdd/test/automation-run-2026-11-06-0844.md

@@ -0,0 +1,80 @@
+# TDD 闭环测试负责人轮 · 2026-11-06 08:44(第 54 次执行)
+
+- **角色**:测试负责人(cfc-tester)。未派发 opencode(测试角色纪律);本工作区离线契约测试实跑 + 测试装置自修 + git 真理核验 + 台账重扫 + 状态盘点。
+- **基线**:HEAD `89b01f973` = 原 origin/cfclub;fetch 后远端 +9 至 `31104bed8`(研发汇报 ×7 + bump ×1 + docs),**`git diff HEAD..origin/cfclub -- cfc-backend/src` 与 `-- docs/tdd/test` 均为空** → 无代码/台账变更,无需 rebase 重测。
+
+## 一、本轮核心证据(实测,非采信)
+
+**主口径 11 类 107 例** → **102 绿 / 5 红 / 0 错**(`-o -B -f cfc-backend/pom.xml -DskipTests=false`):
+
+| 测试类 | 结果 |
+|---|---|
+| HealthReportControllerCreateReportTest | 5/5 ✅ |
+| DanAssessmentControllerGetActiveMaterialTest | 3/3 ✅ |
+| TrainingPlanControllerGetPlanDetailTest | 8/8 ✅ |
+| TaskControllerCreateTaskTest | 7/7 ✅ |
+| TaskServiceReviewTest | 15/15 ✅ |
+| **TaskControllerReviewTest** | **17/17 ✅(B-21 连续第 3 轮全绿清零维持)** |
+| CfBalanceControllerTest | 8/8 ✅(B-10 连续第 12 轮无复发) |
+| DimensionRegistryTreeTest | 9/9 ✅ |
+| DimensionAdminControllerTest | 13/13 ✅ |
+| **DimensionRegistryMapContractTest** | **7 → 4 绿 / 3 红(P-2 口径未决)** |
+| **HealthDimensionControllerTest** | **15 → 13 绿 / 2 红(B-18)→ 修复后 15/15 ✅** |
+
+- **testCompile 0 错**(B-10 连续第 12 轮无复发)。
+- 2 个 YELLOW 键(`health.report.createReport` / `dan.assessment.getActiveMaterial`)契约**连续第 13 轮**复验通过。
+- 5 红 = P-2 MapContract 3 红(map_unknownLegacy / map_emptyLegacy / map_missingLegacy_returnsBadRequest,与既往完全一致,非新回归)+ B-18 HealthDimension 2 红(修复前)。
+
+## 二、本轮实质推进:B-18 测试装置自修(A 类,测试可自处置)
+
+- **问题**:`HealthDimensionControllerTest.overview_missingMemberId`(:56)/ `history_missingMemberId`(:215)调用 `controller.overview(params, 1L, 1L)`,第 3 参 `currentMemberId=1L` 被 `ParamUtils.getLong(params.get("memberId"), currentMemberId)` 兜底成 memberId=1L → 走正常路径返回 200,而用例断言期望 500「memberId 不能为空」。
+- **根因**:测试装置传参口径错误(非生产缺陷)——controller 签名 `overview(params, userId, currentMemberId)`,memberId 缺省时应由 `currentMemberId` 兜底,但缺失场景应传 `null`。
+- **修复**:2 处第 3 参 `1L` → `null`(测试装置仅改 2 行,不动生产代码)。
+- **复验**:`mvn -o -B -f cfc-backend/pom.xml -DskipTests=false -Dtest='HealthDimensionControllerTest' test` → **15/15 全绿 BUILD SUCCESS(219s)**。
+- **效果**:G8 契约红 5 → **3**(仅剩 P-2 MapContract 待口径拍板)。
+
+## 三、git 真理证据
+
+| 键 | 证据 sha | 祖先链 |
+|---|---|---|
+| health.report.createReport(YELLOW 实现) | `1767d4414` | IN CHAIN ✓ |
+| dan.assessment.getActiveMaterial(YELLOW 实现) | `c3e32460a` | IN CHAIN ✓ |
+| health.report.createReport(RED 测试) | `81d8883f7` | IN CHAIN ✓ |
+| dan.assessment.getActiveMaterial(RED 测试) | `faf3ca174` | IN CHAIN ✓ |
+
+(补深后第 6 轮连续三重核验通过)
+
+## 四、状态机盘点
+
+- 本地 `.tdd/state.json`:仍 **3 伪 RED**(health.report.createReport / dan.assessment.getActiveMaterial / guide.trainingPlan.getPlanDetail),mtime `2026-11-04 10:14` **第 22 轮未动**。
+- `--mark-green` 证据链已完全就绪:YELLOW sha 有效 + 契约 13 轮复验通过 + RED sha 在链 + B-21/B-18 清零 → **只差编排侧/主理人同步 state.json**(O-1 第 22 轮)。
+- 研发侧口径:DONE 12 / YELLOW 2 / RED 0,last_deployed=6481a995e 后零 src/main 部署缺口;O-3/O-4 待主理人裁决。
+
+## 五、台账重扫
+
+- discovery:**359 控制器 / 1942 handler / 覆盖 372(19.2%)/ 221 测试文件(@Test 1717,partial 4)**。
+- inventory:跨源 **2992** 用例(md 784 + Playwright 444 + Python 47 + Java@Test 1717 + 场景 11)。
+- 相对 HEAD 增量:仅 discovery.md +1 文件/+2 @Test(`unit/DimensionCodeConstantsTest` 2 例,已 tracked);inventory/automation-status 无 diff。
+
+## 六、覆盖缺口清单
+
+| 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环 |
+|---|---|---|---|---|---|
+| P-2 MapContract 3 红 | map_unknown/empty/missingLegacy 断言 400/500 实得 200 | 契约口径未决,3 红长期挂账 | 主理人/需求拍板 mapLegacyCode 空值语义(400 vs 200+null) | P1 | 拍板后按口径调整用例或实现,复跑 7 例 |
+| 状态机同步缺口 | 3 伪 RED 第 22 轮 | mark-green 无法落库,YELLOW 无法收口 | 编排侧同步 state.json 键集与阶段 | P1 | 同步后 `--mark-green` 收口,复跑契约 |
+| 场景 0/236 跑通 | O-3/O-4 待裁决 | SC 层验收不可量化 | 主理人裁决第三判据口径 | P1 | 裁决后按 sc-key-map 计数 |
+| 无 CI | 仅本机可跑 | 回归依赖人工轮次 | 建最小 3-job 流水线 | P2 | CI 绿后自动化 |
+| B-18 A 类余量 | HealthDimension 2 例已修,其余 A 类未清点 | G1 提升受限 | 按 B-18 清单逐类清点修复 | P2 | 修复后全量 surefire 复跑 |
+
+## 七、门禁结论:**不通过(承袭,有条件)**
+
+- G4 testCompile ✅ 0 错(实跑);G5 契约 ✅ 102 绿 / 5 红(本轮 B-18 已清零 2,剩 P-2 3);G3 前端 ✅ 100%(采信 05:12 轮 386/386);G1 ≈92%(采信 05:12 轮 220 类 1700 例 92.47%);G2 ❌ ~125 非环境红;G6 CI ❌ 无;G7 状态机 ❌ 第 22 轮;G8 ⚠️ 3 红(P-2 拍板即可清零)。
+- **本轮改善**:B-18 HealthDimension 2 红自修清零,契约红 5→3,连续第 3 轮 B-21 清零维持。
+- **使绿顺序**:① 编排侧/主理人同步 state.json(第 22 轮,证据链就绪)→ `--mark-green` 收口 2 YELLOW 键 → ② P-2 map 契约口径拍板 → ③ B-18 其余 A 类清点 → ④ B-13/B-14/B-25 → ⑤ 最小 CI。
+
+## 八、未实测项(如实登记)
+
+- 全量 surefire(220 类)/ 前端 jest(386 例):采信 05:12 兄弟批次。
+- Playwright / 接口冒烟 / langgraph pytest:联网未授权(9082/9000 down)。
+- JaCoCo / PIT / 性能 / 依赖漏洞:无工具。
+- `--mark-green` 落账:被本地状态机过时拒绝(RED 须先 YELLOW),实测受阻非未尝试。

+ 3 - 2
docs/tdd/test/discovery.md

@@ -14,8 +14,8 @@
 | 单元-部分覆盖(handler 方法) | 192 |
 | 单元-未覆盖(handler 方法) | 140 |
 | 单元-无handler 方法 | 1 |
-| 测试文件数 | 220 |
-| @Test 方法总数 | 1715 |
+| 测试文件数 | 221 |
+| @Test 方法总数 | 1717 |
 | 含跳过/假设项(test 级 partial) | 4 |
 
 ## 二、未覆盖控制器(发现「缺口」· 非发明)
@@ -490,6 +490,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceTest.java` | com | 2 | 0 | 0 | CfCommissionController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | com | 2 | 0 | 0 | ConsigneeController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DailyTaskControllerTest.java` | com | 2 | 1 | 1 | DailyTaskController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/DimensionCodeConstantsTest.java` | com | 2 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` | com | 2 | 0 | 0 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceGrantEnergyTest.java` | com | 2 | 1 | 0 | EnergyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | com | 2 | 1 | 0 | FamilyController | — |

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio