109、pytest 从入门到上瘾(三):mock、monkeypatch、fake——测试替身全家桶

📅 2026/7/2 11:29:34
109、pytest 从入门到上瘾(三):mock、monkeypatch、fake——测试替身全家桶
109、pytest 从入门到上瘾(三):mock、monkeypatch、fake——测试替身全家桶上周五晚上十一点,我盯着屏幕上那个诡异的测试失败日志,头皮发麻。一个支付模块的单元测试,明明逻辑没问题,却因为调用了真实的支付宝沙箱接口,网络超时导致整个CI流水线挂了。运维小哥在群里发了个“又来了”的表情包,我默默把测试代码里的requests.post换成了unittest.mock.patch,三分钟后流水线变绿。那一刻我意识到:测试替身不是锦上添花,是保命符。为什么需要测试替身?真实项目里,你的代码大概率会依赖这些东西:数据库、第三方API、文件系统、时间函数、随机数生成器。单元测试的核心原则是“隔离”——我只想测我的业务逻辑,不想管网络通不通、数据库里有没有数据、今天是周几。测试替身就是用来替换这些外部依赖的“假货”。pytest生态里主要有三大家族:mock(行为模拟)、monkeypatch(环境篡改)、fake(轻量级假实现)。别搞混,它们各有各的脾气。mock:最常用的替身演员unittest.mock是Python标准库,pytest直接拿来用。我习惯用pytest-mock插件,它把mock集成到fixture