Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用mock?_Python_Unit Testing_Mocking_Python Unittest - Fatal编程技术网

如何在Python中使用mock?

如何在Python中使用mock?,python,unit-testing,mocking,python-unittest,Python,Unit Testing,Mocking,Python Unittest,我知道有关于Python中模拟的教程和其他帖子,但我对测试和模拟还不熟悉,我读了一些帖子并观看了一个教程,但它们更让我困惑。我有两个例子,我刚刚写得很快,我想知道如何使用mock来测试两个例子 在第一个示例中,测试返回的值,在第二个示例中,测试如果我们创建“MyFile”类的新实例,将创建一个文件 1: 谢谢在第一个示例中,您希望模拟请求。获取,以便控制其返回值。因为请求.get实际上是一个模拟对象 调用get\u link\u tags时,其返回值也将为,因此您可以将其text属性配置为所需的

我知道有关于Python中模拟的教程和其他帖子,但我对测试和模拟还不熟悉,我读了一些帖子并观看了一个教程,但它们更让我困惑。我有两个例子,我刚刚写得很快,我想知道如何使用mock来测试两个例子

在第一个示例中,测试返回的值,在第二个示例中,测试如果我们创建“MyFile”类的新实例,将创建一个文件

1:
谢谢

在第一个示例中,您希望模拟
请求。获取
,以便控制其返回值。因为
请求.get
实际上是一个模拟对象 调用
get\u link\u tags
时,其返回值也将为,因此您可以将其
text
属性配置为所需的任何数据

with mock.patch('requests.get') as mock_get:
    mock_get.return_value.text = "my test data"
    rv = get_link_tags("http://example.com")
第二个例子是一个小骗子;
mock
库提供了一个使其更简单的函数

m = mock.mock_open()
with mock.patch('__main__.open', m):
    f = MyFile('foo.txt', 'data')
    h = m()
    h.write.assert_called_once_with('data')

m
是一个模拟对象,它用语句替换
主体中的所有
open
。需要注意的关键是,当在
MyFile
内部和在下一行中手动调用
m
时,将返回对同一模拟对象的引用。这使您可以测试如何使用
MyFile
中的伪文件。

在第一个示例中,您希望模拟
请求。获取
,以便控制其返回值。因为
请求.get
实际上是一个模拟对象 调用
get\u link\u tags
时,其返回值也将为,因此您可以将其
text
属性配置为所需的任何数据

with mock.patch('requests.get') as mock_get:
    mock_get.return_value.text = "my test data"
    rv = get_link_tags("http://example.com")
第二个例子是一个小骗子;
mock
库提供了一个使其更简单的函数

m = mock.mock_open()
with mock.patch('__main__.open', m):
    f = MyFile('foo.txt', 'data')
    h = m()
    h.write.assert_called_once_with('data')

m
是一个模拟对象,它用
语句替换
主体中的所有
open
。需要注意的关键是,当在
MyFile
内部和在下一行中手动调用
m
时,将返回对同一模拟对象的引用。这可以让您测试如何使用
MyFile
中的假文件。

因为
响应中没有任何
标记。text
(现在是字符串
“我的测试数据”
获取链接标签将返回空列表。
self.assertEqual(rv,[])
是否适合完成测试,或者是否应该调用任何
mock
assert方法?在这种情况下,
self.assertEqual
是可以的,因为您关心的不是mock的实际行为,而是
get\u link\u标记
对mock返回的数据的处理。理想情况下,您将有多个测试,每个测试都将
mock\u get.return\u value.text
设置为不同的值,以确认
get\u link\u标记对每个测试都做了正确的操作。例如,您可以对mock对象做一件事,验证是否使用传递给
获取链接\u标记的参数调用了它。非常感谢您的帮助。由于
响应中没有任何
标记。text
(现在是字符串
“我的测试数据”
)获取链接\u标记将返回空列表。
self.assertEqual(rv,[])
是否适合完成测试,或者是否应该调用任何
mock
assert方法?在这种情况下,
self.assertEqual
是可以的,因为您关心的不是mock的实际行为,而是
get\u link\u标记
对mock返回的数据的处理。理想情况下,您将有多个测试,每个测试都将
mock\u get.return\u value.text
设置为不同的值,以确认
get\u link\u标记对每个测试都做了正确的操作。例如,您可以对mock对象做一件事,验证是否使用传递给
get\u link\u tags
的参数调用它。非常感谢您的帮助。