单测原则与实践

  1. Definition of Done = 单测全部通过

    任何代码(无论函数、方法、模块还是完整业务流程)只有在对应的单元测试全部通过后,才算真正"写完"。没有测试就无法验证功能完整性,也就谈不上交付。

  2. 最小粒度:函数 / 方法

    • 判定标准:该函数的单元测试是否覆盖所有分支并通过。
    • 若测试无法编写或执行失败,则说明实现仍不完整。
  3. 向上扩展:模块 / Service / 业务流程

    • 每个模块或 Service 同样必须有专属测试用例。
    • 这部分测试应聚焦业务规则,而绝不能直接依赖外部 IO(数据库、Nacos、Redis、Kafka 等)。
  4. 业务层测试禁止真实 IO,全部 Mock

    • 通过接口(Port)和 Mock/Stub 隔离外部依赖。
    • 开发者不需要在本地安装任何数据库或中间件,就能完成业务逻辑的编写与回归。
  5. 基础设施层测试才连接真实依赖

    • 只有实现 Nacos、Kafka、数据库等适配器的人,才需要在本地或 CI 中启动对应服务并写集成测试。
    • 例如开发 Nacos 适配器时,需要起一个真的 Nacos;写 Kafka 适配器时,只需要 Kafka。
  6. 开发环境最小化,测试环境全量化

    • 业务开发者的设备上可以 零中间件
    • 基础设施开发者只装自己负责的那一个依赖;
    • 只有在集成 / 冒烟测试环境(或 CI Pipeline 的后置阶段)才会拉起全部依赖,做端到端验证。
  7. 如果无法做到"业务单测不依赖 IO"

    • 说明当前代码结构或分层设计有缺陷,需要调整:

      • 把 IO 逻辑下沉到基础设施层;
      • 通过接口抽象暴露给业务层;
      • 在业务测试里用 Mock 替代真实实现。

Pomelo_刘金 按以上规则执行,可以显著降低环境配置成本、加快反馈循环,并确保业务逻辑和基础设施可以由不同成员并行开发而互不干扰。

相关推荐
止语Lab18 小时前
Go并发编程实战:Channel 还是 Mutex?一个场景驱动的选择框架
开发语言·后端·golang
小码哥_常18 小时前
Spring Boot一键限速:守护你的接口“高速路”
后端
阿丰资源18 小时前
基于SpringBoot的物流信息管理系统设计与实现(附资料)
java·spring boot·后端
王码码203519 小时前
Go语言的包管理:从GOPATH到Go Modules
后端·golang·go·接口
IT_陈寒1 天前
Redis的内存溢出坑把我整懵了,分享这个血泪教训
前端·人工智能·后端
Jasper_o1 天前
MassTransit OutBox 不发送消息问题
后端·.net
掘金码甲哥1 天前
glm模型这么火,咱们用vllm也咧一个呗
后端
邦爷的AI架构笔记1 天前
踩坑3天后,我把公司的AI接口全换成了多模型路由——GPT-6和Claude Opus 4.7同时上线的这周
人工智能·后端
DashVector1 天前
AI Agent 接入 Zvec (一):MCP 篇
数据库·人工智能·后端
程序员老邢1 天前
【技术底稿 15】SpringBoot 异步文件上传实战:多线程池隔离 + 失败重试 + 实时状态推送
java·经验分享·spring boot·后端·程序人生·spring