当前位置: 首页 > news >正文

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


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

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

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

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


二、环境安装

使用 pytestpytest-mock 插件:

pip install pytest pytest-mock

三、基础用法示例

场景:邮件发送服务

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

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

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

# 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

相关文章:

  • 为什么MySQL选择使用B+树作为索引结构
  • 51串口通信实例(蓝牙模块和WiFi模块的介绍和使用)
  • 什么是零拷贝?
  • 模型蒸馏与量化技术:让AI模型“瘦身”却不“降智”的底层逻辑
  • Windows Server 搭建 RADIUS 认证服务器
  • 解决安卓recyclerView滚到底部不彻底问题
  • LeetCode每日精进:622.设计循环队列
  • Linux 病毒扫描工具 ClamAV 使用
  • 4*A100 部署 deepseek-r1-671B
  • Vue 报错error:0308010C:digital envelope routines::unsupported 解决方案
  • Web自动化之Selenium下Chrome与Edge的Webdriver常用Options参数
  • 【中等】59.螺旋矩阵Ⅱ
  • DeepSeek个人知识库
  • vscode设置自动换行
  • pnpm的基本用法
  • 【设计师专属】智能屏幕取色器Pro|RGB/HEX双模式|快捷键秒存|支持导出文档|C++ QT
  • vue3的实用工具库@vueuse/core
  • 【Unity】URP管线Shader编程实例详解 (1) : 漩涡效果shader
  • 10道Redis常见面试题速通
  • 网卡与网口全解析:从基础到Linux高级管理
  • 广东水利全面升级洪水和泄洪预警发布机制
  • 济南维尔康:公司上届管理层个别人员拒不离岗,致多项业务难以推进
  • 文学如何遭遇世界:日本“世界文学”的半个世纪
  • 来论|以法治之力激发民营经济新动能
  • 济南一医院救护车未执行紧急任务时违规鸣笛
  • 在越剧之乡嵊州,浙江音乐学院越剧学院成立