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

使用 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

http://www.kler.cn/a/566721.html

相关文章:

  • Vue 路由基础:Vue 2 和 Vue 3 的比较与使用
  • openinstall支持鸿蒙App Linking:赋能系统级深度链接能力
  • UniApp 使用 u-loadmore 完整步骤
  • Elasticsearch:过滤 HNSW 搜索,快速模式
  • AI岗位面试指南:高频文档问题解析与应答策略
  • VMWare虚拟机Ubuntu Desktop怎么共享文件夹
  • Spring Boot 整合 Apollo 配置中心实战
  • react 路由跳转的几种方式
  • element-ui infiniteScroll 组件源码分享
  • 三轴加速度推算姿态角的方法,理论分析和MATLAB例程
  • Linux网络数据包接收:原理、流程与优化策略
  • Linux:同步
  • 【微知】git log如何将每次提交按照一行查看?(git log --oneline)
  • unity lua属性绑定刷新
  • C++ 设计模式 十一:代理模式 (读书 现代c++设计模式)
  • MySQL 和 Elasticsearch 之间的数据同步
  • docker里面pgadmin4自动备份pg数据库操作
  • NIM平台开发基于提示工程的大语言模型(LLM)应用
  • 笔记20250225
  • IP-----双重发布