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这个类的参数,在上面看到的类定义中,我们知道它有好几个参数,这里介绍最主要的几个:
几种常见的场景
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.objectpatch , 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