国内程序员(尤其是互联网行业)整体上确实写单元测试的比例偏低,这几乎已经是行业共识。不是“技术不行”或“懒”,而是多重结构性、流程性、考核性因素长期叠加导致的“理性选择”或“被迫妥协”。
下面按真实出现频率和影响力从高到低排序,列出最常见的几条原因(基于 2024–2026 年知乎、掘金、V2EX、脉脉、CSDN 等平台的高赞回答共识):
| 排名 | 核心原因 | 程序员最常说的原话 / 内心OS | 占比 / 强度(社区反馈) | 根本驱动因素 |
|---|---|---|---|---|
| 1 | 开发时间根本不够用 | “需求改来改去、deadline 永远前天、加班写功能都写不完,哪有时间写测?” | ★★★★★ | 互联网快节奏 + 卷文化 |
| 2 | 公司 / 领导根本不要求、不考核、不给分 | “写了也没绩效、覆盖率高也没奖金、bug 少也没人夸,写了等于白干” | ★★★★★ | 考核导向只看“功能上线” |
| 3 | 写了也几乎没人 review / 跑 / 维护 | “单测写了放那儿吃灰、别人改代码不改测、CI 不跑测、合并冲突直接删测,谁还写?” | ★★★★☆ | 流程缺失 + 测试文化弱 |
| 4 | 遗留代码 / 老项目太烂,测不动 | “依赖一堆、mock 成本爆炸、业务逻辑几千行、改一行测十几个 case,写测比写业务还累” | ★★★★ | 历史包袱 + 快速迭代遗毒 |
| 5 | 短期看收益几乎为 0,长期收益看不见 | “写测短期看是‘多花时间少写功能’,线上出 bug 了也是我背锅,测覆盖率高也没用” | ★★★★ | 即时反馈 vs 延迟回报 |
| 6 | 很多人确实不会写 / 写不好 | “不知道怎么测异步、怎么 mock 第三方、怎么测 UI、测了也经常假阳性,干脆不测” | ★★★☆ | 教育 / 培训缺失 + 自学路径差 |
| 7 | 依赖 QA / 手工测试 / 内测 / 上线后修 | “有 QA 测、有灰度、有回滚、有监控,出了事修一下就行,何必自己写测?” | ★★★ | 责任分散 + 容错文化 |
| 8 | 心理认知偏差 | “测是测试的事”“测了显得我代码不稳”“我 debug 很快,不需要测” | ★★☆ | 认知惯性 + 英雄主义 |
真实项目中的典型心态演变路径
- 新人阶段:想写 → 公司不要求 → 没人教 → 写得慢/写不好 → 被嘲“写测耽误进度” → 放弃
- 中间阶段:偶尔写 → 功能延期被批 → 领导说“先把功能做了再说” → 彻底不写
- 老油条阶段:彻底放弃 → “反正线上出了锅大家一起背,测了也没用” → 只写业务代码
哪些团队 / 场景写单元测试相对多一些?
- 大厂核心基础组件 / 中间件 / SDK / 基础设施团队(阿里中间件、字节火山引擎、腾讯云内核等)
- 出海 / ToB / SaaS 项目(对稳定性要求高,客户容错低)
- 金融 / 支付 / 交易 / 风控系统(合规 + 强一致性要求)
- 少数极度注重工程质量的团队(有专职测试平台、强制覆盖率、测驱动开发文化)
- 个人开源项目 / 副业 / 独立开发者(对自己代码负责)
一句话最扎心的总结
国内大多数互联网业务开发,写单元测试的“性价比”在当前考核体系和项目节奏下,确实是负的,或者接近于零。
程序员不是不想写,而是写了不赚钱、不加分、耽误上线、没人看、没人维护,长期下来自然就“学会了不写”。
反过来,如果哪天公司把“单测覆盖率 & 测试通过率”真正纳入绩效、晋升、奖金,并给足时间和 review 资源,写测的比例会立刻起飞(参考一些出海团队和大厂基础设施组的真实变化)。
你现在所在的团队 / 项目写单测的情况怎么样?是完全没有,还是偶尔写一点?或者你自己写不写?说说你的真实感受,我可以再针对性聊聊怎么在这种环境下“聪明地写测”而不被卷死。独立开发先写前端还是先写后端?