背景
当前 tests/test_core.py 覆盖了基础模型、存储、搜索、写入和 dream 的核心路径,但 v0.2.0 新增的三大功能(过期清理、版本控制、关联图)完全没有测试:
| 功能 |
方法 |
测试覆盖 |
| 过期清理 |
expire(), ExpiryReport |
❌ |
| 版本控制 |
history(), revert(), VersionRecord |
❌ |
| 关联图 |
relations(), related(), relation_graph(), Relation |
❌ |
| 冲突解决 |
resolve_conflict() |
❌ |
| CLI 全部命令 |
16 个子命令 |
❌ |
| 导入 |
import_data() |
❌ |
这意味着:任何 PR 都可能在改动时悄悄破坏这些功能,且无法被发现。
具体方案
分两批补充测试:
第一批:核心逻辑(约 150 行)
test_expire(): 高置信度+用户明确 → 永久保留;低频+过期 → 标记 expired
test_history_and_revert(): write → update → 查看历史 → revert 到 v1 → 验证内容
test_relations_and_graph(): 写入多条同标签记忆 → 验证 same_topic 关联 → 验证 graph hubs
test_resolve_conflict(): 写入矛盾 → keep=true 验证 conflict 清除 → keep=false 验证 deleted
test_import_data(): 导出 → 清空 → 导入 → 验证条目恢复
第二批:CLI 测试(约 100 行,可选)
- 用
subprocess.run(["shanhai", "write", ...]) 或 cli.main() mock 测试关键命令
- 重点:
search、write、status、export 的输出格式
难度
easy — 都是已有 API 的正向/边界 case,不需要改动源码
预期收益
- 防止回归:后续 PR 有 CI 兜底
- 文档作用:测试即使用示例
- 提升信心:发布 v0.3.0 时不担心 v0.2 功能被破坏
- 覆盖率从 ~40% 提升到 ~80%(核心路径)
背景
当前
tests/test_core.py覆盖了基础模型、存储、搜索、写入和 dream 的核心路径,但 v0.2.0 新增的三大功能(过期清理、版本控制、关联图)完全没有测试:expire(),ExpiryReporthistory(),revert(),VersionRecordrelations(),related(),relation_graph(),Relationresolve_conflict()import_data()这意味着:任何 PR 都可能在改动时悄悄破坏这些功能,且无法被发现。
具体方案
分两批补充测试:
第一批:核心逻辑(约 150 行)
test_expire(): 高置信度+用户明确 → 永久保留;低频+过期 → 标记 expiredtest_history_and_revert(): write → update → 查看历史 → revert 到 v1 → 验证内容test_relations_and_graph(): 写入多条同标签记忆 → 验证 same_topic 关联 → 验证 graph hubstest_resolve_conflict(): 写入矛盾 → keep=true 验证 conflict 清除 → keep=false 验证 deletedtest_import_data(): 导出 → 清空 → 导入 → 验证条目恢复第二批:CLI 测试(约 100 行,可选)
subprocess.run(["shanhai", "write", ...])或cli.main()mock 测试关键命令search、write、status、export的输出格式难度
easy — 都是已有 API 的正向/边界 case,不需要改动源码
预期收益