Patch.object python2024 年 8 月 29 日 | 阅读 3 分钟 引言: 在本文中,我们将讨论 patch.object Python。我们编写的软件大部分时间都直接与我们称为“脏”的服务进行交互。也就是说,这些服务对应用程序很重要,但它们的交互会产生预期的但不需要的副作用,即在自治测试执行的上下文中不受欢迎的服务。 例如,您正在构建一个社交应用程序,并希望测试一项新的 Facebook 发布功能,但您希望在每次运行测试套件时都避免实际发布到 Facebook。Python 的 `unittest` 库包含一个名为 `unittest.mock` 的子包(如果将其声明为依赖项,则为 `mock`)。这提供了一种强大而便捷的方式来模拟和隐藏这些不必要的副作用。 测试对于确保您的软件逻辑正确、可靠且在编写健壮代码时能够正常运行至关重要。然而,测试的有效性取决于测试演示这些标准的程度。障碍、复杂逻辑和不可预测的依赖关系使得编写有效的测试变得困难。Python mock 对象库 `unittest.mock` 使克服这些障碍成为可能。 什么是模拟或修补?模拟对象在测试环境中替换并模仿真实对象。它是一种灵活而强大的工具,用于提高测试质量。 使用 Python mock 对象的一个目的是在测试期间操纵代码的行为。 例如,如果您的代码向外部服务发出 HTTP 请求,则测试的可预测性仅取决于该服务是否按预期运行。这些外部服务的行为的快速变化可能会导致测试套件出现间歇性故障。 因此,我们建议您在受控环境中测试代码。用模拟对象替换实际请求使您能够以可预测的方式模拟外部服务故障和成功响应。 测试代码库的某些区域可能很困难。这些区域包括难以执行的“except”块和“if”语句。Python mock 对象可以帮助您管理代码的执行路径,以到达这些区域并提高代码覆盖率。 什么是 `patch`?`unittest.mock` 提供了一种强大的对象模拟机制,称为 `patch()`。它会在特定模块中查找一个对象,并用模拟对象替换该对象。`Patch()` 通常用作装饰器或上下文管理器,为模拟目标对象提供一个区域。 `patch()` 作为装饰器是如何使用的?如果您想通过测试函数模拟对象,请将 `patch()` 用作函数装饰器。为了了解其工作原理,请重组 `my_calendar.py` 文件,将逻辑和检查放在单独的文件中。 示例: 现在,我们提供一个 `patch()` 函数用作装饰器的示例。下面给出了示例 - 这些函数现在都在它们自己的文件中,与测试分开。然后,在名为 `tests.py` 的文件中重新构建测试。到目前为止,我们已经将 `monkey` 对象修补到了对象所在的那个文件中。Monkey patching 在运行时用一个对象替换另一个对象。 `patch()` 函数如何用作上下文管理器?有时,您可能希望将 `patch()` 用作上下文管理器而不是装饰器。选择上下文管理器的一些原因包括:
结论: 您已经学到了很多关于使用 `unittest.mock` 模拟对象的内容! 现在您可以:使用 mock 来模拟测试中的对象,学习使用数据,并自定义 mock 对象的返回值和 side effects,以了解对象的使用方式。 在您的代码库中查找 `patch()` 对象。 在使用 Python mock 对象时避免出现问题。 奠定了知识基础,以帮助编写更好的测试。Mock 对象提供了对代码的洞察,您可能无法在其他地方获得。 最后免责声明。请小心谨慎地使用 mock 对象!很容易使用 Python 的 mock 对象功能创建会降低测试价值的 mock。 下一主题Python 脚本中的暂停 |
什么是二叉搜索树?二叉树是一种二叉数据结构,包含不同的节点,每个节点最多有两个子节点。这些节点遵循一些属性,包括:二叉树的左节点的值小于根节点的值。……
5 分钟阅读
如何在 Python 中打印模式 在 Python 中,for 循环用于打印各种模式。打印各种模式是面试中最常见的编程问题。多个 for 循环用于打印模式,其中第一个外部循环用于...
阅读25分钟
Python 分数模块用于处理有理数的算术。该模块允许我们创建整数、浮点数、数字、小数和字符串的分数实例。什么是分数实例?分数实例可以使用一对整数或从字符串创建,...
阅读 2 分钟
通配符是一个符号,可以替代或补充一个或多个字符。在计算机程序、语言、搜索引擎(包括操作系统)中,通配符用于简化搜索条件。问号 (?) 和星号 () 是...
阅读 3 分钟
当我们处理 Python 字典时,我们可能会遇到需要从字典中获取选择性键值总和的问题。这个问题可能发生在 Web 开发领域,让我们看看以下解决问题的方法。方法……
阅读 3 分钟
在以下教程中,我们将了解 Quandl 包及其在 Python 编程语言中的使用,并提供一些示例。但在开始之前,让我们了解什么是 Quandl?理解 Quandl Quandl 是一个为其提供经济、金融和替代数据集的平台。
阅读9分钟
简介 Python 是一种广泛使用的高级编程语言,在多个领域有多种应用,如 Web 开发、数据科学、人工智能、机器学习等等。Python 因其简单性、易用性以及与多种平台的兼容性而在科学界获得了巨大的声望...
阅读 3 分钟
在本教程中,我们将使用 Python 编程语言学习 KMP 算法。该算法主要用于以 O(n) 复杂度搜索模式或子字符串。该算法可能会在技术面试中被问到,以测试开发人员的能力。KMP 算法 KMP 代表 Knuth-Morris-Prat...
阅读 2 分钟
引言 在我们开始学习分类变量编码之前,让我们首先了解数据类型及其尺度的基础知识。对于学习者来说,理解这些主题对于继续处理分类变量编码至关重要。众所周知,......
阅读9分钟
介绍在 Python 中,del 关键字通常用于删除对象。由于 Python 中的所有内容都表示某种对象,因此 del 关键字也可以用于删除列表、变量、列表的一部分等。del 语句不返回任何类型...
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India