基于 Python 中输入的模拟返回值
本文将介绍如何在 Python 中创建一个根据输入返回不同值的模拟函数。 我们还将向您展示如何测试我们的模拟函数。
最后,我们将向您展示一些更高级的模拟函数的技术。 您无需了解编程或测试即可跟进。
基于 Python 中输入的模拟返回值
Python 是一种非常强大的语言,拥有丰富的测试工具生态系统。 它具有许多使其非常适合单元测试的特性。
一个流行的工具是 mock 模块,它允许我们用模拟对象替换我们系统的某些部分,并断言它们是如何使用的。
模拟函数允许我们用我们的代码替换函数的功能。 当我们想要在函数不可用时测试代码的行为时,或者当我们想要测试代码对不同输入的反应时,这会很有用。
模拟在 Python 中的使用
模拟是一种强大的技术,可用于提高我们测试的可靠性和效率。 本文将教我们如何在 Python 测试中使用模拟对象。
-
Mocking 允许我们用模拟版本替换真实对象。 当我们想要测试依赖于另一个尚不可用的组件的组件时,这会很有用。
例如,我们可能希望在不实际连接到数据库的情况下测试数据库连接。
- 模拟也可以用来消除外部依赖。 当我们想避免在测试期间进行网络调用或与数据库交互时,这会很有用。
-
模拟可以用来提高我们测试的效率。 当我们模拟一个对象时,我们可以避免实例化真实对象的开销。
这在测试实例化许多对象的代码时特别有用。
- 模拟也可以用来使我们的测试更可靠。 剔除外部依赖项可以避免依赖网络或数据库可用性的不稳定测试。
在 Python 中使用模拟对象
要在我们的测试中使用模拟对象,我们首先需要创建一个 Mock 类。 此类可用于创建看起来和行为都像真实事物的模拟对象。
一旦我们有了 Mock 类,我们就可以实例化模拟对象并在我们的测试中使用它们。 模拟对象与它们所替换的真实对象具有相同的方法,因此我们可以像使用真实对象一样使用它们。
当我们完成使用模拟对象时,我们可以断言它被正确使用。 例如,我们可以断言模拟数据库连接用于执行查询。
因此,模拟是一种强大的工具,可用于提高 Python 测试的可靠性和效率。
通过用模拟对象替换真实对象,我们可以避免实例化真实对象的开销。 我们还可以消除外部依赖性,使我们的测试更加可靠。
Python 中模拟的意义
嘲笑这个词在多种情况下使用; 但是,本文档通篇将使用以下定义:
对模拟函数的调用会提供一个瞬时值,该值是在没有实际工作的情况下预设的。 假对象的特征和方法完全在测试内部以相同的方式定义,无需首先生成实际对象或进行任何其他工作。
谈到测试,编写测试的人可以定义函数调用的返回值这一事实赋予了他们巨大的力量。 然而,这也意味着编写测试的人需要做一些基础工作才能准确设置所有内容。
Python 中的 unittest.mock 模块负责编程语言中的模拟。 作为装饰器和上下文管理器的 patch 函数和 MagicMock 类是该模块中两个必不可少的类和函数。
它还包括其他几个有用的类和方法。 模拟 Python 所涉及的大部分工作都可以通过使用这两个健壮的组件来完成。
编写一个根据输入返回不同值的模拟
现在我们已经很清楚 mock 及其功能了。 让我们通过编码示例更好地理解 mock。
要创建该函数,我们将使用 *args
和 **kwargs
,因为这些参数采用简单参数和关键字参数。 因此,我们可以传递任何数据类型:字符串、整数、浮点数和布尔值,我们也可以为关键字参数赋值。
- 创建一个函数。
-
传递参数
*args
和关键字参数**kwargs
-
返回具有
*args
和**kwargs
的元组 - 调用函数
- 打印结果
查看下面的代码以获得更好的理解。
def mock_function(*args, **kwargs):
return (args, kwargs)
mock_function('x', 'y')
(('x', 'y'), {})
mock_function('x', y=2, z='mock test')
输出:
(('x',), {'y': 2, 'z': 'mock test'})
在代码输出中,我们可以看到首先打印的是 *args
值,即 x,然后是 **kwargs value {'y': 2, 'z': 'mock test'})
。
基于输入返回的 Python Mock
现在我们将创建一个 mock 来返回我们之前讨论过的函数。
- 要创建模拟函数,我们将首先从 unittest.mock 模块导入 MagicMock。
- 创建一个变量并使用 unittest.mock 中的 MagicMock。
- 打印结果。
示例代码:
from unittest.mock import MagicMock
my_mock_1 = MagicMock(name='abid', return_value=mock_function)
my_mock_1
输出:
<MagicMock name='abid' id='139916486559696'>
代码输出显示使用了 MagicMock 命令。 并且我们可以看到我们在代码中使用的名字abid和代码生成的一个id号。
现在我们将创建另一个变量来查看我们的变量 my_mock_1 在哪里。
示例代码:
func_from_mock2 = my_mock_1()
func_from_mock2
输出:
<function __main__.mock_function(*args, **kwargs)>
代码输出显示该函数带有参数 *args 和关键字参数 **kwargs。
现在我们将给变量 func_from_mock2 一些值。 所以我们将传递 10, 10 并打印它。
示例代码:
func_from_mock2(10,10)
输出:
((10, 10), {})
输出 ((10, 10)) 表示我们使用了参数 *args
,{} 表示我们可以使用关键字参数 **kwargs
。
现在我们将使用关键字参数 **kwargs
。
示例代码:
func_from_mock2(15, 18, param=50)
输出:
((15, 18), {'param': 50})
我们同时使用了参数 *args
和关键字参数 **kwargs
。 ((15, 18), 显示模拟输入的参数部分,{'param': 50})
显示模拟输入的关键字参数部分。
因此,这就是 Mock 基于输入返回不同值的方式。
我们希望您发现这篇 Python 文章有助于理解如何在 Python 中使用 Mock。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串