迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的 Mock 和 Patch 之间的区别

作者:迹忆客 最近更新:2023/06/28 浏览次数:

代码开发首先是测试并行开发(TPD)。 尽管如此,我们还是编写了开发的测试并执行它们来验证代码的准确性(而不是直接运行代码或使用控制台)。

在 Python 中,我们有一个称为单元测试的过程,其中包含模拟和补丁函数。 本文将讨论这两个角色的用途和区别。


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

在本文中,我们不会从整体上解决单元测试,而是更多地关注模拟和补丁功能。

我们使用模拟 Python 包将被测系统的特定组件替换为模拟对象,并对其使用情况进行断言。 它是 Python 标准库的一个组件,从 Python 3.3 开始可以作为 unittest.mock 进行访问。

unittest.mock 类消除了整个测试套件中多个存根的需要。 执行特定操作后,我们可以设置有关我们使用的方法/属性和我们调用它们的参数的断言。

它允许我们指定返回值并选择所需的功能。

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

模拟基于 action -> assertion(即,首先使用模拟,然后对其收到的调用进行断言)模式,而不是许多模拟框架使用的 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)

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


总结

我们可以注意以下几点来帮助我们做出决策:

  1. 为了方便地用模拟对象(或其他对象)替换对象并在完成后恢复之前的状态,或者在出现异常的情况下,使用补丁装饰器/上下文管理器功能。
  2. mock.patch 创建模拟或派生对象,我们可以手动生成它们。 手动构建仅用于修复本地函数或其他不需要重置的模拟。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中使用 SciPy、NumPy 和 Pandas 存储数据

发布时间:2023/06/28 浏览次数:184 分类:Python

我们将了解为什么需要数据分箱以及哪种技术最适合哪种情况。Python 中的分箱 分箱是推断不同变量关系的最强大的分析技术之一。分箱是一种非参数且高度灵活的技术,其中变量被分类为不同

在 Python 中使用 Fsolve

发布时间:2023/06/28 浏览次数:65 分类:Python

本文将探讨如何使用 fsolve 在 Python 中求解。 我们还将探索它的使用场景和一些示例代码,以更好地理解如何以及何时使用它来达到某种结果。让我们首先了解 fsolve 是什么以及为什么使用它。

在 Python 中创建 Getter 和 Setter

发布时间:2023/06/28 浏览次数:172 分类:Python

这些行为在支持 OOP 的编程语言中很流行,Python 也支持它。 本文将讨论如何在 Python 中创建 getter 和 setter。Python 中的 Getter 和 Setter

从 Java 代码调用 Python 脚本

发布时间:2023/06/28 浏览次数:93 分类:Python

本篇文章介绍了从 Java 代码调用 Python 脚本的三种不同方法。从 Java 代码调用 Python 脚本 有时,我们必须从Java代码中调用Python脚本来满足项目需求。

Python 中的位掩码简介

发布时间:2023/06/27 浏览次数:125 分类:Python

本篇文章介绍了 Python 中的位掩码,并演示了如何使用按位运算符(例如 AND、OR、NOT 等)执行位掩码。Python 中的位掩码简介 位掩码是几乎所有编程语言的通用概念;

在 Ubuntu 中卸载 Python

发布时间:2023/06/27 浏览次数:158 分类:Python

本文演示如何从 Ubuntu 中删除或卸载 Python。检查你的系统中是否安装了Python 使用 Ctrl+Alt+T 打开终端。打开终端后,使用命令 python3 --version 检查您的系统是否安装了 python。

Python Teradata 连接

发布时间:2023/06/27 浏览次数:86 分类:Python

本文将讨论一些基本的正确准则,并在讨论连接方式之前了解 Teradata 模块的工作原理。Python 中的 Teradata 数据库 您可以使用 Python 和 Teradata 模块编写与 Teradata 数据库的强大交互脚本。

在 Python 中查找素因数

发布时间:2023/06/27 浏览次数:175 分类:Python

本篇文章将介绍如何在 Python 中执行素因数分解。质因数分解概述 在数学中,数字的因子是那些可以除以给定数字且余数为零的数字。

在 Python 中从 URL 中提取域

发布时间:2023/06/27 浏览次数:86 分类:Python

本文将通过实际例子来讲解Python的 urlparse() 函数从URL中解析并提取域名。 我们还将讨论提高解析 URL 和使用其不同组件的能力。使用 urlparse() 从 URL 中提取域

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便