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

news/2025/2/26 6:04:30

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

在软件开发中,单元测试用于验证代码逻辑的正确性。但实际项目中,代码常依赖外部服务(如数据库、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.niftyadmin.cn/n/5868137.html

相关文章

(八)趣学设计模式 之 装饰器模式!

目录 一、 啥是装饰器模式?二、 为什么要用装饰器模式?三、 装饰器模式的实现方式四、 装饰器模式的优缺点五、 装饰器模式的应用场景六、 装饰器模式 vs 代理模式七、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢…

AI提示词的种类与适合的任务

以下是提示词的主要种类及其适用任务,基于大模型特性与最佳实践总结: 一、基础提示词 零样本提示(Zero-shot Prompting) 形式:直接输入任务指令,不提供示例(如“翻译以下句子:Hello …

实战篇-java8中的垃圾回收器

1. 背景 java8中默认使用parallel scavenge parallel old的组合。当然我们也可使用parnew cms或g1的方案。 在实际应用过程中,如果ygc和fgc都比较少,如ygc一天几次或者一小时几次,其实我们都不用关心垃圾回收器的选型。因为垃圾回收器的改…

axios几种请求类型的格式

Axios 是一个基于 Promise 的 HTTP 客户端,广泛用于浏览器和 Node.js 中发送 HTTP 请求。它支持多种请求格式,包括 GET、POST、PUT、DELETE 等。也叫RESTful 目录 一、axios几种请求类型的格式 1、get请求 2、post请求 3、put请求 4、delete请求 二…

JAVA【微服务】Spring AI 使用详解

目录 一、前言二、Spring AI 概述2.1 什么是 Spring AI2.2 Spring AI 特点2.3 Spring AI 带来的便利2.4 Spring AI 应用领域2.4.1 聊天模型2.4.2 文本到图像模型2.4.3 音频转文本2.4.4 嵌入大模型使用2.4.5 矢量数据库支持2.4.6 数据工程 ETL 框架三、Spring AI 对接 ChatGPT3.…

JavaScript的BOM编程

BOM编程 what 通过JS代码操作浏览器,js的编程就是面向对象编程,最多的就是面向标签对象编程 BOM:Browser Object Model 浏览器对象模型,以window对象为依托,表示浏览器窗口以及页面可见区域。 学习BOM操作,就是学习…

【DeepSeek系列】05 DeepSeek核心算法改进点总结

文章目录 一、DeepSeek概要二、4个重要改进点2.1 多头潜在注意力2.2 混合专家模型MoE2.3 多Token预测3.4 GRPO强化学习策略 三、2个重要思考3.1 大规模强化学习3.2 蒸馏方法:小模型也可以很强大 一、DeepSeek概要 2024年~2025年初,DeepSeek …

ROS 2机器人开发--话题通信实战--制作一个可视化系统状态监听工具

1 准备工作 2 自定义通信接口 3 系统信息获取与发布 4 测试QT 5 数据可视化显示 1 准备工作 需求分析:开发一个基于ROS 2话题通信的系统状态监听工具,能够实时获取系统(如CPU、内存、网络等)的运行状态,并通过可视…