gpt4 book ai didi

python - 在 Python 中使用 Mock()

转载 作者:太空狗 更新时间:2023-10-29 20:41:11 25 4
gpt4 key购买 nike

您能否给出一些在 Django 单元测试中使用 Mock() 的清晰示例?我想更清楚地了解它。

更新:我想出了一些东西,所以我在下面分享。

最佳答案

第 1 部分:基础知识

from mock import Mock

模拟对象是一种对象,它是一种用于代码的Dummy我们不想被执行,但我们想知道一些信息(调用次数,调用参数)。此外,我们可能希望为该代码指定一个返回值。

让我们定义一个简单的函数:

def foo(value):
return value + value

现在我们准备为它创建一个 Mock 对象:

mock_foo = Mock(foo, return_value='mock return value')

现在我们可以检查一下:

>>> foo(1)
2
>>> mock_foo(1)
'mock return value'

并获取一些通话信息:

>>> mock_foo.called
True
>>> mock_foo.call_count
1
>>> mock_foo.call_args
((1,), {})

Mock() 实例的可用属性是:

call_args       func_code       func_name
call_args_list func_defaults method_calls
call_count func_dict side_effect
called func_doc
func_closure func_globals

它们是不言自明的。

第 2 部分:@patch 装饰器

@patch 装饰器使我们能够轻松地为导入的对象(类或方法)创建模拟对象。这在编写单元测试时非常有用。

让我们假设我们有以下模块 foo.py:

class Foo(object):
def foo(value):
return value + value

让我们为@patch 装饰器编写一个测试。我们将修补 foo 模块中类 Foo 中的方法 foo。不要忘记导入。

from mock import patch
import foo

@patch('foo.Foo.foo')
def test(mock_foo):
# We assign return value to the mock object
mock_foo.return_value = 'mock return value'
f = foo.Foo()
return f.foo(1)

现在运行它:

>>> test()
'mock return value'

瞧!我们的方法被成功覆盖。

关于python - 在 Python 中使用 Mock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7556161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com