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

pytest--1--pytest-mock常用的方法

1. mocker.patch

mocker.patch 是最常用的方法,用于替换指定的对象或方法。它可以用于模拟函数、方法、类或模块。

语法
mocker.patch(target, new=DEFAULT, spec=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)
示例
import pytest
from my_module import greet_userdef test_greet_user(mocker):# 模拟 my_module.get_greeting 函数mock_get_greeting = mocker.patch('my_module.get_greeting', return_value="Hi, John Doe!")result = greet_user("John Doe")assert result == "Hi, John Doe!"mock_get_greeting.assert_called_once_with("John Doe")

2. mocker.patch.object

mocker.patch.object 用于替换对象上的特定方法或属性。

语法
mocker.patch.object(target, attribute, new=DEFAULT, spec=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)
示例
import pytest
from my_module import User, greet_userdef test_greet_user(mocker):# 模拟 User 类的 get_name 方法mock_get_name = mocker.patch.object(User, 'get_name', return_value="John Doe")user = User()result = greet_user(user)assert result == "Hi, John Doe!"mock_get_name.assert_called_once()

3. mocker.patch.dict

mocker.patch.dict 用于临时修改字典,通常用于修改环境变量或配置字典。

语法
mocker.patch.dict(in_dict, values=(), clear=False, **kwargs)
示例
import pytest
import osdef test_environment_variable(mocker):# 模拟环境变量mocker.patch.dict('os.environ', {'MY_VAR': 'value'})assert os.environ['MY_VAR'] == 'value'

4. mocker.spy

mocker.spy 用于创建一个 spy,它会记录方法的调用,但不会改变方法的行为。

语法
mocker.spy(target, method)
示例
import pytest
from my_module import Userdef test_user_get_name(mocker):user = User(name="John Doe")# 创建一个 spyspy_get_name = mocker.spy(user, 'get_name')result = user.get_name()assert result == "John Doe"spy_get_name.assert_called_once()

5. mocker.stub

mocker.stub 用于创建一个没有预定义行为的模拟对象,通常用于测试回调函数。

语法
mocker.stub()
示例
import pytestdef test_callback(mocker):callback = mocker.stub()# 调用回调函数callback("Hello, World!")callback.assert_called_once_with("Hello, World!")

6. mocker.MagicMock

mocker.MagicMock 是一个更强大的模拟对象,可以模拟任何对象,并提供丰富的断言方法。

语法
mocker.MagicMock(*args, **kwargs)
示例
import pytestdef test_magic_mock(mocker):mock_obj = mocker.MagicMock()mock_obj.method.return_value = "Hello, World!"result = mock_obj.method()assert result == "Hello, World!"mock_obj.method.assert_called_once()

7. mocker.AsyncMock

mocker.AsyncMock 用于模拟异步函数或方法。

语法
mocker.AsyncMock(*args, **kwargs)
示例
import pytest
import asyncioasync def async_function():return "Hello, World!"def test_async_function(mocker):mock_async_function = mocker.AsyncMock(return_value="Hello, World!")result = asyncio.run(mock_async_function())assert result == "Hello, World!"mock_async_function.assert_called_once()
http://www.dtcms.com/a/283194.html

相关文章:

  • 代码随想录day36dp4
  • 震坤行获取商品SKU操作详解
  • 16路串口光纤通信FPGA项目实现指南
  • Kotlin获取集合中的元素操作
  • Java与Vue精心打造资产设备管理系统,提供源码,适配移动端与后台管理,助力企业高效掌控资产动态,提升管理效能
  • 【Java】JUC并发(synchronized进阶、ReentrantLock可重入锁)
  • 二重循环:输入行数,打印直角三角形和倒直角三角形
  • Java后端开发核心笔记:分层架构、注解与面向对象精髓
  • 基于Android的旅游计划App
  • Web基础 -MYSQL
  • 冷库耗电高的原因,冷链运营者的降本增效的方法
  • LVS四种模式及部署NAT、DR模式集群
  • CD53.【C++ Dev】模拟实现优先级队列(含仿函数)
  • 【计算机网络】数据通讯第二章 - 应用层
  • 深度学习之反向传播
  • 【迭代】PDF绘本录音播放,点读笔方案调研和初步尝试
  • leetcode 725 分割链表
  • 微算法科技研究量子视觉计算,利用量子力学原理提升传统计算机视觉任务的性能
  • Kafka入门
  • 语音增强论文汇总
  • Go基本数据类型
  • 81、面向服务开发方法
  • Redisson实现分布式锁
  • Redisson实现限流器详解:从原理到实践
  • HTML 入门教程:从零开始学习网页开发基础
  • 前端知识:浏览器工作原理与开发者工具知识笔记
  • WIN10系统优化篇(一)
  • Leetcode 02 java
  • IDEA报错“资源找不到”?重启就好了!!?
  • 使用Dify构建HR智能助理,深度集成大模型应用,赋能HR招聘管理全流程,dify相关工作流全开源。