一、库安装
1、mock作为python的标准库,是3.3版本才纳入的。如果是python 2.7,需要手工进行安装,mock库安装过程(mac os):
直接sudo pip install mock安装,可能会报错:
OSError: [Errno 1] Operation not permitted: '/tmp/pip-1aKU9M-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
看报错,是python的six组件出错了,尝试升级一下:sudo pip install six --upgrade --ignore-installed
2、升级完成后,再进行mock安装:sudo pip install mock,搞定
Downloading mock-2.0.0-py2.py3-none-any.whl (56kB)
100% |████████████████████████████████| 61kB 132kB/s
Requirement already satisfied: funcsigs>=1; python_version < "3.3" in /Library/Python/2.7/site-packages (from mock)
Requirement already satisfied: six>=1.9 in /Library/Python/2.7/site-packages (from mock)
Collecting pbr>=0.11 (from mock)
Downloading pbr-3.1.1-py2.py3-none-any.whl (99kB)
100% |████████████████████████████████| 102kB 337kB/s
Installing collected packages: pbr, mock
Successfully installed mock-2.0.0 pbr-3.1.1
二、mock测试实战
1、比较好的例子:http://www.jb51.net/article/64265.htm
2、本地实战:
在test_lib.py文件中定义下面3个函数,用于获取根据操作系统类型,获取文件下载路径:
def get_OS_type(): system = platform.system() print ":::System type:", system return system def get_system_user(): current_user = getpass.getuser() print ":::System user:", current_user return current_user def get_default_download_path(): os_type = get_OS_type() system_user = get_system_user() print "os_type=", os_type print "system_user=", system_user default_path = "" if os_type == 'Windows': default_path = "C:\\Users\\" + system_user + "\\Downloads" elif os_type == 'Darwin': default_path = "/Users/" + system_user + "/Downloads" print ":::Default path:", default_path return default_path
在做单元测试的时候,可以把当前操作系统类型和系统用户给mock出来,测试不同的系统和不同的用户组合:
创建unittest文件,内容如下:
#!-*- coding:utf-8 -*- import re import unittest from test_lib import * import mock class MyTestCase(unittest.TestCase): @mock.patch('test_lib.get_OS_type') @mock.patch('test_lib.get_system_user') def test_get_default_download_path(self, mock_get_system_user, mock_get_OS_type): ''' :param mock_get_system_user: 系统用户名称 (注意:一定要注意参数的顺序,根据mock的倒序作为函数入参) :param mock_get_OS_type:系统操作系统类型 :return: ''' mock_get_OS_type.return_value = "Windows" mock_get_system_user.return_value = "solonabc" full_path = get_default_download_path() mock_get_OS_type.assert_called_once_with() mock_get_system_user.assert_called_once_with() self.assertEqual("C:\\Users\\solonabc\\Downloads", full_path) if __name__=='__main__': unittest.main()