专题归档 · 2026 年 7 月(编辑分组,非实际写作日期)
BodySense:给 Diagnosis Handler 写 Go 测试
为 Go Diagnosis Handler 补边界测试时关于依赖、Fake Repo 和测试范围的思考。
DMR-002:Go 中的测试
go 中的测试
原记录中的处理路径:
用户请求生成诊断 → DiagnosisHandler
→ 检查会话,读取 Profile / extracted info
→ 调用 Python Diagnosis AI
→ governance 检查
→ accepted 才保存诊断并推进 phase
上面的 Diagnosis 业务比较复杂。在进行诊断前,它大致需要满足以下几个步骤:
- 确保当前的会话存在
- 读取当前的会话信息(即会话诊断的结果信息)
- 获取用户的私人信息
- 调用一个 AI Service(即诊断服务)
如果我们要进行测试,且所有环节都走真实流程的话,测试就会变得非常重——需要准备真实的数据库环境、服务环境等,最终演变成一个比较重的集成测试或端到端测试。因此,我们需要对这个测试进行优化。
测试与依赖问题
根据上面的要求,去给 DiagnosisHandler.handleHTTP 这一层级写测试文件,然后要把仓储层 mock 一下,构建一个测试用的仓储层(Fake Repo):
直接创建一个 diagnosisHandlerRepo struct,然后实现所有 真实 ConsultationSession 的方法
[!question] 拆分疑问 拆分后这个测试文件会大改吗 是的话,是否应该先设计(重构)好领域,再搞测试文件
实际上没有进行手搓代码, 二是让 ai 实施了,然后先进行一个阅读学习。发现了一下问题:
- 当前的 diagnosis 服务 没有时间比较好的依赖注入,写死了 ai.service 之类的参数,导致测试比较困难。应该在后续重构为更优雅的依赖注入模式