- 根 docs/ 保留产品入口文档(README/部署手册/检查表/离线部署) - 按内容归类到子目录: requirements/(需求) design/(设计/接口/方案/UI) architecture/(架构) implementation/(实施/计划/跟踪) bugfix/(缺陷记录) testing/(测试) guides/(操作指南:配置/模型/命令/依赖/调试) archive/(源码片段归档) - 删除 superpowers 目录(edge 与 control 两处, 含历史设计草稿) - 更新 docs/README.md 导航与新结构一致
65 lines
2.8 KiB
Markdown
65 lines
2.8 KiB
Markdown
# 单元测试开发计划
|
||
|
||
## 进度总览
|
||
|
||
| 日期 | 内容 | 测试数 |
|
||
|------|------|--------|
|
||
| 2026-07-27 | P0 全部 + P1 #4 | 新增 8 个 |
|
||
| 2026-07-27 | 清理 9 个静态内容测试 | 删除 9 个 |
|
||
| 2026-07-27 | 修复预存失败 | 修复 7 个 |
|
||
| 2026-07-27 | P1 #5 #6 + P2 #7 #8 + 新功能 | 新增 18 个 |
|
||
| **当前** | 服务层 88 全过,Web 层 107 全过 | **195 测试,0 失败** |
|
||
|
||
## 现有测试评估
|
||
|
||
现有测试全部集中在 `FeatureRegistry.ResolveTemplate`(模板选择算法),其他核心函数覆盖率 **0%**。测试模式存在以下问题:
|
||
|
||
1. **依赖实现细节**:测试检查具体的模板名(如 `std_face_recognition_stream`),改配置就失败
|
||
2. **弱断言**:部分测试只检查错误,不验证输出正确性
|
||
3. **缺乏端到端**:没有测试从输入到输出的完整业务流程
|
||
4. **无数据隔离**:`BuildPipeline` 依赖 SQLite、Agent、Registry,难以单独测试
|
||
|
||
## 测试原则
|
||
|
||
- 面向功能行为,不面向实现细节
|
||
- 验证给定输入产生预期输出
|
||
- 测试边界条件(空输入、重复、中文)
|
||
- 测试相互独立,可并行运行
|
||
|
||
## 计划
|
||
|
||
### P0 — 直接造成过生产问题的函数 ✅
|
||
|
||
| # | 函数 | 测试点 | 状态 |
|
||
|---|------|--------|------|
|
||
| 1 | `deriveSafeInstanceName` | ASCII名原样返回、中文名生成 hash 前缀 | ✅ |
|
||
| 2 | `cleanSourceNames` | 去重、去空格、空元素过滤、排序 | ✅ |
|
||
| 3 | `BuildPipeline` | 创建识别单元、去重、空源保护 | ✅ |
|
||
|
||
### P1 — 核心业务流程
|
||
|
||
| # | 函数 | 测试点 | 状态 |
|
||
|---|------|--------|------|
|
||
| 4 | `actionConsoleSave` | 功能选择+source合并→批量下发 | ✅ |
|
||
| 5 | `actionWizardApply` + `apiWizardDeviceInfo` | 设备选择、通道加载 | ✅ |
|
||
| 6 | `injectIntegrationsIntoConfig` | alarm 注入、storage 注入 | ✅ |
|
||
|
||
### P2 — 辅助函数
|
||
|
||
| # | 函数 | 测试点 | 状态 |
|
||
|---|------|--------|------|
|
||
| 7 | `ResolveChannelToSource` | 通道名→视频源名、_alarm_后缀剥离 | ✅ |
|
||
| 8 | `SaveVideoSourceAsset` 新签名 | 新建、改名、冲突检测 | ✅ |
|
||
|
||
### 新增 — 2026-07-27 新功能
|
||
|
||
| # | 函数 | 测试点 | 状态 |
|
||
|---|------|--------|------|
|
||
| 9 | `BuildPipeline` 模板克隆 | 标准模板首次使用自动克隆、复用已有克隆 | ✅ |
|
||
| 10 | `GetDevicesUsingTemplate` | 匹配设备、无匹配、跨模板隔离 | ✅ |
|
||
| 11 | `GetTuningItems` / `SaveTuningItems` | 硬编码定义完整性、路径解析、值读写 | ✅ |
|
||
| 12 | `mergeRuntimeInstancePatch` | nodes 包装到 override 下、params 保留 | ✅ |
|
||
| 13 | `SaveDeviceOverlays` / `GetDeviceOverlays` | 保存、覆盖、清空、未知设备 | ✅ |
|
||
| 14 | `actionDeviceOverlaysSave` | 保存 overlay 勾选、清空 | ✅ |
|
||
| 15 | 调参路径工具函数 | splitTuningPath、resolveTuningPath、setTuningPath | ✅ |
|