safesight/docs/implementation/unit-test-plan.md
tian 007a996c37 docs: 规范化文档目录结构
- 根 docs/ 保留产品入口文档(README/部署手册/检查表/离线部署)
- 按内容归类到子目录:
  requirements/(需求) design/(设计/接口/方案/UI) architecture/(架构)
  implementation/(实施/计划/跟踪) bugfix/(缺陷记录) testing/(测试)
  guides/(操作指南:配置/模型/命令/依赖/调试) archive/(源码片段归档)
- 删除 superpowers 目录(edge 与 control 两处, 含历史设计草稿)
- 更新 docs/README.md 导航与新结构一致
2026-08-02 11:28:51 +08:00

65 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 单元测试开发计划
## 进度总览
| 日期 | 内容 | 测试数 |
|------|------|--------|
| 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 | ✅ |