Kee*_*Kee 8 python unit-testing mocking
你能给出一些在Django单元测试中使用Mock()的明确例子吗?我想更清楚地理解它.
更新:我已经找到了一些东西,所以我在下面分享.
Kee*_*Kee 16
from mock import Mock
Run Code Online (Sandbox Code Playgroud)
模拟对象是一种对象,它是Dummy我们想要不执行的代码的一种,但我们想知道一些信息(调用次数,调用参数).我们也可能想为该代码指定返回值.
让我们定义简单的功能:
def foo(value):
return value + value
Run Code Online (Sandbox Code Playgroud)
现在我们准备为它创建一个Mock对象:
mock_foo = Mock(foo, return_value='mock return value')
Run Code Online (Sandbox Code Playgroud)
现在我们可以检查一下:
>>> foo(1)
2
>>> mock_foo(1)
'mock return value'
Run Code Online (Sandbox Code Playgroud)
并获得有关电话的一些信息:
>>> mock_foo.called
True
>>> mock_foo.call_count
1
>>> mock_foo.call_args
((1,), {})
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
他们是不言自明的.
@patch装饰者该@patch装饰使我们能够轻松地创建导入对象(类或方法)模拟对象.在编写单元测试时非常有用.
我们假设我们有以下模块foo.py:
class Foo(object):
def foo(value):
return value + value
Run Code Online (Sandbox Code Playgroud)
让我们为@patch装饰器编写一个测试.我们将从模块foo中修改类中的方法.别忘了进口.Foofoo
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)
Run Code Online (Sandbox Code Playgroud)
现在运行它:
>>> test()
'mock return value'
Run Code Online (Sandbox Code Playgroud)
瞧!我们的方法成功覆盖了.
| 归档时间: |
|
| 查看次数: |
2590 次 |
| 最近记录: |