【稳健之道】第二篇:Mock 的艺术 —— 隔离外部世界的“混沌” 📅 发布时间:2026/7/13 7:08:53 👁️ 浏览次数: 专栏进度02 / 03 (测试进阶专题)单元测试的灵魂在于 “孤立”。如果一个测试因为对方服务器挂了而失败那这个测试就失去了意义。Mock模拟的本质就是用一个“假对象”替换掉“真依赖”让测试只关注你写的逻辑本身。一、 核心概念什么是 Patch在 Python 中unittest.mock.patch 是最常用的工具。它像是一个临时的“偷梁换柱”魔术在测试运行期间强行改变某个模块或函数的指向。场景你要测试一个天气预报函数它依赖于一个真实的 HTTP 请求。weather.pyimportrequestsdefget_weather_advice(city):# 这个请求是不可控的可能超时可能返回 404responserequests.get(fhttps://api.weather.com/{city})ifresponse.json()[weather]Rain:return记得带伞return天气不错test_weather.pyfromunittest.mockimportpatchfromweatherimportget_weather_advicepatch(weather.requests.get)deftest_get_weather_advice(mock_get):# 配置 Mock 对象的返回内容伪造一个下雨的 JSONmock_get.return_value.json.return_value{weather:Rain}resultget_weather_advice(Shanghai)assertresult记得带伞# 还可以验证requests.get 是否真的被调用了参数对吗 mock_get.assert_called_once_with(https://api.weather.com/Shanghai)二、 进阶技巧Side Effect副作用有时候仅仅返回一个固定值是不够的。你需要 Mock 对象表现得更“真实”比如第一次调用成功第二次调用抛出异常。deftest_api_retry_logic(mock_get):# 模拟第一次超时错误第二次返回正常mock_get.side_effect[TimeoutError(连接超时),{status:200}]# 这里可以编写并测试你的重试逻辑代码...三、 避坑指南Patch 到底该 Patch 谁这是 Mock 中最经典的坑“Patch 应该发生在对象被查找的地方而不是被定义的地方。”错误做法如果你在 weather.py 中写了 from requests import get然后你去 patch requests.get测试会失效。因为 weather 模块已经持有了原始 get 函数的引用。做法始终 patch 你的业务代码中引用的那个路径即 patch(‘weather.requests’) 或 patch(‘weather.get’)。四、 为什么要克制使用 MockMock 虽好但不能贪杯。Mock 过度会导致测试虚假通过你 mock 了一个返回值为 {“id”: 1}但真实 API 升级后返回的是 {“user_id”: 1}你的测试依然是绿的但程序上线就崩了。测试维护成本变高当代码重构、变量名改变时你得同步修改大量的字符串路径 patch。建议只对外部 API、数据库、文件系统、时间函数等“不可控因素”进行 Mock。
系统编码规范文件Word 一、总则 规范背景适用范围修订与商讨机制 二、核心原则 规范前置原则简易性清晰性健壮性效率性 三、格式规范 代码缩进长行拆分空白区域使用SQL 语句规范 SELECT 语句规则INSERT 语句规则UPDATE 语句规则DELETE 语句规则 四、命名规范 通用规则 有意义命名术语化命名超长命名… 2026/5/17 11:09:47
深入探究电力电子变压器的技术实现与性能优化 电力电子变压器。 整流级采用级联H桥多电平拓扑,由三个H桥模块级联,将工频交流转换为直流,级联多电平可以减小开关器件的电压应力和开关频率。 中间级采用单主动桥和高频隔离变压器。 输出级采用三相逆变器。 整流级采用虚拟两相,… 2026/7/11 22:50:16
Flutter 组件 sse_stream 的适配 鸿蒙Harmony 深度进阶 - 驾驭高并发 Server-Sent Events 背压处理、实现鸿蒙端工业级 AI 响应流与长效链路治理方案 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 组件 sse_stream 的适配 鸿蒙Harmony 深度进阶 - 驾驭高并发 Server-Sent Events 背压处理、实现鸿蒙端工业级 AI 响应流与长效链路治理方案 前言 在前文我们初步探讨了 sse_stre… 2026/7/11 5:21:41
Jumbled Word Game设计原理与教育应用 1. 这不是拼字游戏,而是一场大脑的“抗干扰训练”“Jumbled Word Game”——光看名字,很多人第一反应是“哦,就是把字母打乱让人猜单词嘛”,类似小时候语文课上的填字游戏或者手机里消消乐式的文字解谜。但如果你真这么想… 2026/7/13 7:08:36
直流负载管理中的G6D-ASI继电器与PIC18F47Q10应用 1. 直流负载管理的核心挑战与优化思路在工业自动化和电力电子领域,直流负载管理一直是个既基础又关键的课题。我最近在一个太阳能充电控制项目中,深刻体会到了传统方案的局限性——当面对动态变化的负载时,简单的开关控制会导致明显的效率损失… 2026/7/13 7:08:36
Python数据分析实战:从数据处理到可视化完整项目指南 在技术领域,我们常常需要处理和分析大规模的数据集,例如流媒体平台的收视数据、用户行为日志或系统性能指标。这些数据背后隐藏着重要的业务洞察和技术挑战。本文将以一个虚构但典型的场景为例,介绍如何从零开始搭建一个数据分析和可视化系统… 2026/7/13 7:06:35
矢量场旋度:从环量密度到行列式,3步推导与物理直觉 矢量场旋度:从环量密度到行列式的三步物理直觉构建引言:旋度的物理图景与数学本质想象将一片羽毛轻轻放入湍急的河流中,它会如何旋转?这个看似简单的现象背后,隐藏着矢量场分析中最精妙的概念之一——旋度(… 2026/7/13 7:04:33
蓝牙5.4音频开发:STM32与LC3编解码器实战 1. 项目背景与核心组件选型在无线音频传输领域,Bluetooth 5.4标准带来了革命性的改进,特别是LE Audio的引入彻底改变了传统蓝牙音频的传输方式。本项目采用IDC777-1蓝牙模块与STM32F410RB微控制器的组合方案,实现了高质量、低延迟的无线音频串… 2026/7/13 7:00:29
Win10系统安装全攻略:从启动到优化的完整流程解析 这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来。我更建议把第一次测试拆成三步:启动、单条任务、批量任务。下面按实际落地顺序拆一遍。1. 先确认它到底解决的是转写、配音还是字幕生成问题从输入材料看,这个项目标题是… 2026/7/13 6:58:29
HS2-HF Patch终极指南:如何用3步解决Honey Select 2的70+个痛点 HS2-HF Patch终极指南:如何用3步解决Honey Select 2的70个痛点 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾经在Honey Select 2中遇到过… 2026/7/13 0:01:19
语音转文字工具AsrTools:让音频整理变得简单高效 语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text … 2026/7/13 0:03:19
基于深度学习的蘑菇或花卉或动漫人物或中草药货水果蔬菜等识别系统31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_ 基于深度学习的蘑菇或花卉或动漫人物或中草药货水果蔬菜等识别系统31(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 独家界面!不会重复,此项目属于本人原创,若有雷同,均是盗卖,各位买… 2026/7/13 0:05:20
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/13 2:34:55