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

2.8 KiB
Raw Blame History

单元测试开发计划

进度总览

日期 内容 测试数
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