Pytest 的底层源码最应该学习的技术
在 Pytest 的底层源码中它并不是简单地“在指定函数地方 Mock”也不是单纯地“增加异常捕获”。它的设计要精妙得多1. 不是“在指定地方 Mock”而是“在内存中偷梁换柱”你理解的“在指定的函数地方 mock”听起来像是在业务代码里写 if is_test: mock() else: run()。但 Pytest 绝对不碰你的业务代码。它的底层原理是**“猴子补丁Monkey Patching”**在测试执行前Pytest 直接去内存的模块字典dict里把真实函数的内存地址强制替换成了假函数的内存地址。效果你的业务代码浑然不觉它以为自己调用的还是真实的数据库或网络请求但实际上它调用的是 Pytest 塞进去的假函数。测试结束后Pytest 再把真实地址换回来。2. 不是简单的“增加异常捕获”而是“生命周期拦截”Pytest 并没有在你的业务函数外面套一个 try…except。它利用了我们之前聊过的钩子机制Hook和Fixture 机制。Pytest 在底层有一个严格的执行协议pytest_runtest_protocol它把测试分成了三个阶段Setup准备阶段在这里注入入参执行内存替换Mock。Call执行阶段在这里运行你的业务函数。Teardown清理阶段在这里还原内存清理环境。如果业务函数抛出了异常Pytest 的底层框架会接住这个异常并把它转化为一个“测试失败FAILED”的状态而不是让程序直接崩溃。3. 不是普通的“看返回结果”而是“AST 断言重写”你平时写 assert result expected在 Pytest 底层这行代码在运行前就被语法树AST重写了。Pytest 把它变成了一段极其复杂的代码不仅判断结果对不对还会把 result 和 expected 的每一个属性、每一个变量的值都打印出来。这就是为什么 Pytest 报错时能给你提供那么丰富、那么详细的上下文信息。

相关新闻

【266期】公开我每次重装系统必装的软件!

【266期】公开我每次重装系统必装的软件!

作为一个重度电脑用户,每天基本都要跟电脑打交道,所以能在我的电脑中长期留下来的软件,那都是属于夯中之夯了。今天重点挑几个我高频使用的给大家过一遍,无广告也全都是免费的,放心使用。 卸载工具天花板 Geek 首先是…

2026/10/11 13:32:15 阅读更多 →
Zenodo数据下载终极指南:3步掌握zenodo_get命令行工具

Zenodo数据下载终极指南:3步掌握zenodo_get命令行工具

Zenodo数据下载终极指南:3步掌握zenodo_get命令行工具 【免费下载链接】zenodo_get Zenodo_get - a downloader for Zenodo records 项目地址: https://gitcode.com/gh_mirrors/ze/zenodo_get Zenodo_get是一个专门为科研工作者设计的Zenodo数据下载工具&…

2026/10/6 21:49:14 阅读更多 →
脱离博图13天:工业自动化工程师的通用技术生存指南

脱离博图13天:工业自动化工程师的通用技术生存指南

1. 项目缘起:当“博图”成为日常在工业自动化这个行当里,尤其是和西门子PLC打交道,TIA Portal(我们习惯叫它“博图”)就像空气和水一样,是绕不开的存在。从最早的STEP 7 V5.5,到后来集成了WinCC…

2026/10/10 17:22:04 阅读更多 →

最新新闻

商人过河问题详解:状态转移与BFS的Matlab实现

商人过河问题详解:状态转移与BFS的Matlab实现

1. 从一道经典建模题说起:商人过河到底在考什么数学建模入门阶段,几乎人人都会碰到“商人过河”这道题。题目本身并不复杂:三个商人带着三个随从,要坐一条小船过河,小船每次最多载两人,而且无论在哪一岸&am…

2026/10/13 2:36:32 阅读更多 →
机器学习加速超材料逆向设计:从电磁仿真到参数搜索的实战指南

机器学习加速超材料逆向设计:从电磁仿真到参数搜索的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:36:32 阅读更多 →
DeepSeek Harness插件:笔记整理与会话管理实战指南

DeepSeek Harness插件:笔记整理与会话管理实战指南

这次我们来看一个跑得很快的 AI 工具项目:围绕 DeepSeek 模型能力做的两款 Harness 插件,一款负责笔记整理,一款负责会话管理。项目上线不到一周,GitHub 接近 4000 个 star,在插件类项目里算很扎眼的起步速度。从这个热…

2026/10/13 2:36:32 阅读更多 →
Trae 技能配置实战:用 skills.md 让 AI 编程不再自由发挥

Trae 技能配置实战:用 skills.md 让 AI 编程不再自由发挥

你是不是也有这种体验:用 AI IDE 写代码,对话窗里聊得头头是道,真让它干活又开始自由发挥,步骤乱、输出格式乱,结果照样要自己返工。问题根源很多时候不是模型不够聪明,而是缺少一份标准操作说明书。skills…

2026/10/13 2:36:32 阅读更多 →
501B开放权重稠密大模型:部署、量化与蒸馏实操指南

501B开放权重稠密大模型:部署、量化与蒸馏实操指南

1. 从“501B 开放权重”这个数字说起第一次看到“501B 参数、开放权重”这两个词摆在一起,我的第一反应不是兴奋,而是算账。501B 这个量级,按常见的 FP16 精度算,光权重就要占掉大约 1TB 的显存空间;就算上 INT8 量化&…

2026/10/13 2:36:32 阅读更多 →
Trae实测:从对话生成到Agent执行,AI编程工具如何改变开发流程

Trae实测:从对话生成到Agent执行,AI编程工具如何改变开发流程

最近AI Coding已经热到不需要再解释背景了。从最早的代码补全,到能直接对话生成整段功能,再到现在的Agent式“你提需求、它动手改代码”,这一波工具迭代的速度,确实让很多开发者的日常工作方式都变了。我陆陆续续试过不少同类产品…

2026/10/13 2:35:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →