51Testing软件测试论坛
标题:
python Mock 使用
[打印本页]
作者:
xiaobaicai123
时间:
2016-3-18 17:03
标题:
python Mock 使用
Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。类似于Hot Pat
[size=1em]class Mock(spec
[size=1em]=None, side_effect=None, return_value=DEFAULT, wraps=None, name=None, spec_set=None, **kwargs)
class Mock的参数
先来看看Mock这个类的参数,在上面看到的类定义中,我们知道它有好几个参数,这里介绍最主要的几个:
name: 这个是用来命名一个mock对象,只是起到标识作用,当你print一个mock对象的时候,可以看到它的name。
return_value: 这个字段可以指定一个值(或者对象),当mock对象被调用时,如果side_effect函数返回的是
DEFAULT
,则对mock对象的调用会返回return_value指定的值。
side_effect: 这个参数指向一个可调用对象,一般就是函数。当mock对象被调用时,如果该函数返回值不是
DEFAULT
时,那么以该函数的返回值作为mock对象调用的返回值。
几种常见的场景
1.
Mock一个函数
@mock.patch('function_name')
2. Mock
Mock一个对象里面的方法
@mock.patch.object(class, 'function_name')
3.
让Mock的函数每次被调用返回不同的值,而1,2中的方法每次调用都会返回同样的值 --side-effect=
[] (序列)
4.
让Mock的函数抛出exception --side-effect=
side_effect = Exception
5.
Mock多个函数,主要是注意顺序 (patch顺序和函数参数顺序相反)
patch.object
和
patch , with 用法 举例
@patch
def
test_success_request
(mock_send_request):
mock_send_request.return_value =
"200"
assert_equal(
client
.visit_ustack()
,
'200'
)
assert_true(
True
,
mock_send_request.assert_has_calls)
call_args = mock_send_request.call_args
print
(call_args)
assert_is_instance(call_args[
0
][
0
]
,
str
)
@patch.object
@
patch.object
(client
,
'send_request'
)
def
test_fail_request2
(
mock_request
):
mock_request
.return_value =
"404"
assert_equal(client.visit_ustack()
,
'404'
)
with patch & with patch.object
def
test_success_request1
():
status_code
=
"404"
mock_request = mock.Mock(
return_value
=
status_code
)
with
patch(
'client.send_request'
,
mock_request):
assert_equal(client.visit_ustack()
,
status_code
)
def
test_success_request2
():
status_code =
'200'
mock_request = mock.Mock(
return_value
=status_code)
with
patch.object(client
,
'send_request'
,
mock_request):
assert_equal(client.visit_ustack()
,
status_code)
参考文档:
http://www.blogjava.net/qileilove/archive/2014/05/27/414143.html
https://segmentfault.com/a/1190000002965620
作者:
wowopo
时间:
2016-8-10 11:22
谢谢分享 学习python中
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2