单元测试之Mock测试(1)

一、库安装

1mock作为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()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值