Python中Mock和Patch的区别

这篇具有很好参考价值的文章主要介绍了Python中Mock和Patch的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在测试并行开发(TPD)中,代码开发是第一位的。尽管如此,我们还是要写出开发的测试,并执行它们来验证代码的准确性(而不是直接运行代码或使用控制台)。

在Python中,我们有一个叫做单元测试的过程,里面有mock 和patch 函数。这篇文章将讨论这两个角色的用途和区别。

Mock 和Patch 对象库的用途和区别

在这篇文章中,我们不会把单元测试作为一个整体来处理,而是更多地关注于mock 和patch 函数。

我们使用mock Python包,用mock 对象替换你的被测系统的特定组件,并对它们的使用进行断言。它是Python标准库的一个组成部分,从Python 3.3开始可以作为unittest.mock 。

unittest.mock 类消除了在整个测试套件中对几个存根的需要。在执行了一个特定的动作后,我们可以设置关于我们使用了哪些方法/属性以及我们调用它们的参数的断言。

它让我们指定返回值并选择需要的功能。

MagicDock可以处理Magic 对象,它是Mock 的子类。Mock 和MagicMock 对象在我们使用它们时自发地产生特性和方法,并记录使用信息。

嘲讽是基于action -> assertion (即先让mock 被使用,然后对它收到的调用进行断言)模式,而不是许多嘲讽框架使用的record -> replay 模式。此外,mock 模块提供了一个叫做patch() 的装饰器,它负责在测试的上下文中修补类和模块级别的特性,并提供了一个用于产生唯一实例的哨兵。

示例代码:

from unittest.mock import patch
@patch('sample_module.sample_object')
def test_function(mock_object):
    print(mock_object)

输出:

<MagicMock name='sample_object' id='1870192341512'>

上面的代码片段等同于下面的代码片段:

def test_function():
    with patch('sample_module.sample_module') as mock_object:
        print(mock_object)

该函数允许我们用mock 对象替换任何对象,以避免调用生产代码,并检查原始对象如何被调用(如果该对象是一个函数)。使用patch (或类似的方法)是首选,因为这可以确保补丁在测试后被还原(或在第二种情况下在上下文管理器范围后被还原),这样其他测试或程序就不会受到影响。

结论

我们可以注意到以下几点来帮助我们的决策:文章来源地址https://www.toymoban.com/news/detail-689927.html

  • 为了方便地用mock 对象(或其他对象)来替代对象,并在完成后恢复之前的状态,或者在出现异常的情况下,使用patch 装饰器/上下文管理器函数。
  • mock.patch 创建mock 或衍生对象,我们可以手工制作。手动构建的只用于修复本地函数或其他不需要重置的模拟。

到了这里,关于Python中Mock和Patch的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python测试框架 Pytest —— mock使用(pytest-mock)

    安装:pip install pytest-mock 这里的mock和unittest的mock基本上都是一样的,唯一的区别在于pytest.mock需要导入mock对象的详细路径。 先将需要模拟的天气接口,以及需要模拟的场景的代码写好,然后在进行遵循pytest的用例规范进行书写关于mock的测试用例 通过上述代码,提供pytest中

    2024年02月09日
    浏览(33)
  • 测试开发【Mock平台】09开发:项目管理(五)搜索、删除和Table优化

    【Mock平台】为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React框架完成搭建一个测试工具平台,希望作为一个实战项目对各位的测试开发学习之路有帮助,大奇一个专注测试技术干货原创与分享的家伙。 Mock平台系统项目基本配置,我们已经完成了展示,增

    2024年02月10日
    浏览(32)
  • python技术栈 之 单元测试中mock的使用

    一、什么是mock? mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 二、mock的作用 特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。 unittest是python内置的单元测

    2024年02月13日
    浏览(31)
  • python技术栈之单元测试中mock的使用

    mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。 unittest是python内置的单元测试库,在做接口测试时,如果开

    2024年02月08日
    浏览(33)
  • python接口自动化测试 - mock模块基本使用介绍

    py3已将mock集成到unittest库中 为的就是更好的进行单元测试 简单理解, 模拟接口返回参数 通俗易懂, 直接修改接口返回参数的值 官方文档:unittest.mock --- 模拟对象库 — Python 3.11.1 文档 解决依赖问题,达到解耦作用 当我们测试某个 目标接口(模块) 时,该接口 依赖其他接

    2024年02月02日
    浏览(64)
  • python一点通: 并行技术有几种? thread和process有什么区别

    在Python中,并行性是一种技术,允许程序同时执行多个任务,从而提高整体性能。Python提供了几种实现并行性的方法,包括线程(threading)、多进程(multiprocessing)以及concurrent.futures模块。在本博文中,我们将探讨线程和进程的概念,它们的区别以及何时选择它们。我们还将

    2024年02月09日
    浏览(34)
  • Python接口测试实战5(下) - RESTful、Web Service及Mock Server

    REST及RESTful API Web Service XML解析 Mock Server REST:表述性状态转移或表现层状态转移,“表现”及每个接口地址(URI)都表现为(视为)一个资源对象(文本资源、图片资源、服务资源),状态转移指通过POST/PUT方法发送完整的新状态信息来更改资源对象的状态 如某https://api.***.com

    2023年04月11日
    浏览(69)
  • Mock和Vite-plugin-Mock的区别是什么?

    我不知道大家和我是否有一样的疑问,之前Mock.js用的挺好,为啥又出现了一个vite-plugin-mock,而且这个插件还依赖于Mock.js.那么他的优势到底是什么呢?如果你也有这样的疑问,本文最后会给出答案解开这个谜底 我之前已经百度了好久发现讨论这个问题的人好少,只有一俩个人

    2024年02月10日
    浏览(20)
  • 接口定义,常见的接口,常见的接口请求方式,put请求和patch请求的区别

    接口定义 :应用程序编程接口,指前后端数据交互的一套标准,包括软件内部之间的接口,硬件之间的接口或者是软件对外的接口。 常见的接口类型:         1,Webservice接口 ,主要用于服务端的接口,走soap协议通过http传输,请求报文和返回报文都是xml格式,测试的时候

    2023年04月27日
    浏览(26)
  • 代码级接口测试与单元测试的区别

    接口测试是一个比较宽泛的概念, 近几年在国内受到很多企业和测试从业者的追捧, 尤其是上层的UI在取悦用户的过程中迭代更新加快, UI自动化维护成本急剧上升的时代, 大家便转向了绕过前端的接口层面进行测试. 但是很多人, 对接口测试的理解并不完整, 事实上, 我们无论通

    2024年02月04日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包