使用 pytest-mock 进行 Python 高级单元测试与模拟

news/2025/2/26 23:21:27/

一、单元测试与模拟的意义

在软件开发中,单元测试用于验证代码逻辑的正确性。但实际项目中,代码常依赖外部服务(如数据库、API、文件系统)。直接测试这些依赖会导致:

  1. 测试速度变慢
  2. 测试结果不可控
  3. 产生副作用(如真实发送邮件)

模拟(Mocking) 技术通过创建虚拟对象替代真实依赖,使测试聚焦于当前单元的逻辑。


二、环境安装

使用 pytestpytest-mock 插件:

pip install pytest pytest-mock

三、基础用法示例

场景:邮件发送服务

假设我们有一个邮件发送类 EmailSender

python"># email_sender.py
class EmailSender:def send(self, to, subject, body):# 真实发送邮件的逻辑return True

测试时不应实际发送邮件。使用 pytest-mock 模拟 send 方法:

python"># test_email_sender.py
def test_send_email(mocker):mock_send = mocker.patch("email_sender.EmailSender.send")sender = EmailSender()result = sender.send("user@example.com", "Hello", "Test email")mock_send.assert_called_once_with("user@example.com", "Hell

http://www.ppmy.cn/news/1575115.html

相关文章

环境安装与配置:全面了解 Go 语言的安装与设置

在学习 Go 语言之前,首先需要确保开发环境已正确安装和配置。本部分将详细介绍如何在不同平台(Windows、macOS 和 Linux)上安装 Go 语言,以及如何进行环境变量配置和工作空间的设置。 一、安装 Go 语言 1. Windows 安装方法 下载…

牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)

文章目录 牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)A. 夹心饼干B. C. 食堂大作战(思维)D. 小苯的排列计数(差分、树状数组)E. 和和(大根堆,前缀和)F. 怎么写线性SPJ &…

Java进阶学习笔记95——网络编程

什么是网络编程? 可以让设备中的程序与网络上的其他设备中的程序进行数据交互(实现网络通信的)。 Java提供了哪些网络编程的解决方案呢? 基本的通信架构: 基本的通信架构有2种形式:CS架构(Cli…

【数据挖掘】可信度

【数据挖掘】可信度 目录:1. 训练和测试2. 预测性能评估3. 数据挖掘方法比较分类方法聚类方法关联规则挖掘方法异常检测方法 4. 预测概率5. 损失函数6. 计算成本7. 成本敏感分类8. 提升图(Lift Chart)作用示例 9. ROC曲线(Receive…

2024年国赛高教杯数学建模D题反潜航空深弹命中概率问题解题全过程文档及程序

2024年国赛高教杯数学建模 D题 反潜航空深弹命中概率问题 原题再现 应用深水炸弹(简称深弹)反潜,曾是二战时期反潜的重要手段,而随着现代军事技术的发展,鱼雷已成为现代反潜作战的主要武器。但是,在海峡或…

Unity FBXExport导出的FBX无法在Blender打开

将FBX转换为obj: Convert 3D models online - free and secure

Wireshark详解

Wireshark使用详解 1.Wireshark 简介2.下载与安装1. 下载地址2. 安装步骤(以 Windows 为例) 3. 界面与核心功能1. 主界面布局2. 常用菜单功能 4. 过滤功能详解1. 过滤类型2. 常用过滤命令 5. 过滤命令与网络结构对应6. 使用注意事项7. 案例分析 TCP 三次…

一文掌握Selenium的详细使用

文章目录 1. 安装 Selenium1.1 安装 Selenium 库1.2 下载浏览器驱动 2. 基础用法2.1 启动浏览器2.2 查找元素2.3 操作元素 3. 高级功能3.1 等待机制3.2 处理弹窗3.3 执行 JavaScript3.4 切换窗口或 iframe3.5 处理 Cookies3.6 截图3.7 处理下拉菜单 4. 浏览器选项4.1 无头模式&…