pytest-mock:让 Python 测试中的 mock 更优雅 文章目录pytest-mock让 Python 测试中的 mock 更优雅一个 fixture 搞定所有 mock不只是 patch小工具解决大问题pytest-mock让 Python 测试中的 mock 更优雅写 Python 测试时mock 几乎是个绕不开的话题。用 pytest 做测试框架的项目虽然标准库 unittest.mock 提供了完整的 mock 能力但每次都要手动 import、手动 cleanup代码里全是 setup 和 teardown看着就累。pytest-mock 就是专门解决这个痛点的。它是 pytest 官方生态下的一个插件GitHub 上 2000 多 Star。核心思路很直接把 mock 整合进 pytest 的 fixture 体系让创建、使用和清理变得自然流畅。一个 fixture 搞定所有 mock熟悉 pytest 的人都知道fixture 是它最具特色的设计。pytest-mock 提供的mockerfixture几乎把 mock 相关的操作都封装好了。import os class UnixFS: staticmethod def rm(filename): os.remove(filename) def test_unix_fs(mocker): mocker.patch(os.remove) UnixFS.rm(file) os.remove.assert_called_once_with(file)测试函数直接传mocker参数用它来 patch。测试结束后 mock 自动清理不用手动写 stopall。代码简洁了不少也少了一些容易漏掉的清理步骤。对比传统写法不用 mocker fixture 时需要在 setup 方法里写 patcher、在 teardown 里写 stop一个不留神就漏了。用 mocker 之后这些都不需要操心fixture 的生命周期帮你全管了。不只是 patch除了 mock.patchpytest-mock 还封装了 spy 和 stub。spy 用来监控已有方法的调用情况。和 patch 不同spy 不修改方法行为只是记录调用次数、参数和返回值。适合只想做断言检查、不想改变方法逻辑的场景。stub 则是 mock 的简化版直接生成一个什么都不做的替身。不需要配置返回值不需要定义行为逻辑适合测试中只需要填充参数的地方。项目还利用了 pytest 的内省能力。mock 断言失败时pytest 会展示更清晰的差异对比快速定位断言失败的原因。小工具解决大问题pytest-mock 做的事情不多但它把测试中一个高频痛点处理得很干净。不需要学习新的 mock 框架不需要改现有测试结构装好插件就能用。安装就是一行 pip加到 pytest 插件列表就能立即生效。对于用 pytest 的团队来说这是个值得加进项目依赖的工具。它不会改变测试的写法只是让 mock 的过程少了一些样板代码。这是个值得加进项目依赖的工具。它不会改变测试的写法只是让 mock 的过程少了一些样板代码。

相关新闻

最新新闻

基于PMBus的µModule稳压器:精确设定与回读功能实战解析

基于PMBus的µModule稳压器:精确设定与回读功能实战解析

前阵子调一块多路供电的板卡,FPGA 内核电压设定 0.85V,满载时实测却到了 0.868V。万用表、示波器来回换,折腾了小半天才定位到问题是负载点压降和测量点没选对共同造成的。那次之后我就下了个决心:后续平台的核心电压,…

2026/8/27 20:53:44
前后端代码生成是什么 Spec驱动全栈生成与标准源码导出

前后端代码生成是什么 Spec驱动全栈生成与标准源码导出

前端, 以及后端代码生成指代的是, 于AI辅助开发期间, 借助结构化Spec, 同时对前文提到的前端(Vue/React), 以及后端代码予以驱动, 进而进行生成的是自动化操作, 而且可进行产出规范的设定, 能确保产出基于一致性进行保障, 在接口定义、数据模型之上以及业…

2026/8/27 20:53:44
无电池BLE信标:能量收集驱动的低功耗物联网节点设计全解析

无电池BLE信标:能量收集驱动的低功耗物联网节点设计全解析

最近做了一款无电池的节能信标模块,把 Battery-Free、Energy-Harvesting 这两个词从概念变成了能跑的量产原型:靠室内弱光收集能量,直接驱动 BLE 广播与传感器采集,核心控制器用的是 nRF51822 SoC。它解决的问题很明确——你不想给…

2026/8/27 20:53:44
同余运算:从时钟算术到RSA加密的底层原理与应用

同余运算:从时钟算术到RSA加密的底层原理与应用

1. 同余:从“时钟算术”到现代密码学的基石 如果你曾盯着时钟,计算过“再过100小时是几点”,或者玩过一些数字谜题,发现某些数字除以同一个数后余数总是相同,那么你已经不自觉地触碰到了“同余”的概念。这绝非仅仅是数…

2026/8/27 20:53:44
基于RP2040的Windows免驱开发板设计:U盘拖拽烧录实践

基于RP2040的Windows免驱开发板设计:U盘拖拽烧录实践

前阵子我把自制的“Windows-Compatible Dev Board”发给几个同事试用,反馈最集中的一句话是:“插上电脑能直接跑吗?”这让我重新想明白一件事:开发板好不好用,很多时候不取决于主频高不高,而取决于它在用户…

2026/8/27 20:53:44
Blender洗衣机产品动画全流程:从场景搭建到批量渲染

Blender洗衣机产品动画全流程:从场景搭建到批量渲染

这次我们来看一个动态设计项目:给瑞士品牌 Schulthess 洗衣机做一套可循环使用的产品动态视觉。它不是一张静态海报,而是让滚筒、内筒、水流、泡沫、门圈反光和镜头全部动起来,最终输出 4K 序列帧和一份可以发给客户的预览视频。这类项目的关…

2026/8/27 20:48:43