建立handle_mock_01.py文件python
# 1. 导入mock模块 from unittest import mock class Payment(object): """ 建立支付类 """ pass payment = Payment() # 2. 建立Mock对象, 做为Payment的实例方法 payment.pay = mock.Mock(return_value="Success") # 3. 当调用pay方法时, 会返回定义Mock对象时指定的return_value值 print(payment.pay())
建立handle_mock_02.py文件web
# 1. 导入mock模块 from unittest import mock class Payment(object): """ 建立支付类 """ pass def parameter_return_data(param): """定义参数与返回值映射函数 """ param_data = { "用户ID1": "支付成功", "用户ID2": "支付异常", "用户ID3": "支付超时", "用户ID4": KeyError("参数有误"), # 能够返回异常 } return param_data[param] payment = Payment() # 2. 建立Mock对象, 做为Payment的实例方法 payment.pay = mock.Mock(side_effect=parameter_return_data) # 3. 当调用pay方法时, 会返回指定的值 print(payment.pay("用户ID1")) # 返回结果: 支付成功 print(payment.pay("用户ID2")) # 返回结果: 支付异常 print(payment.pay("用户ID3")) # 返回结果: 支付超时 print(payment.pay("用户ID4")) # 返回结果: '参数有误'
建立handle_mock_03.py文件面试
# 1. 导入mock模块 from unittest import mock class Payment(object): """ 建立支付类 """ pass def fn(a, b): """假设实际pay函数, 有两个参数""" pass payment = Payment() # 2. 建立Mock对象, 做为Payment的实例方法 payment.pay = mock.create_autospec(fn, return_value="支付成功") # 3. 当调用pay方法时, 传参数的个数若是不为两个, 则会抛出异常 print(payment.pay("用户ID1", "卡号")) # 返回结果: 支付成功 print(payment.pay("用户ID1")) # 返回结果: TypeError: missing a required argument: 'b'
建立handle_mock_04.py文件架构
# 1. 导入mock模块 from unittest import mock class Payment(object): """ 建立支付类 """ pass def parameter_return_data(param): """定义参数与返回值映射函数 """ param_data = { "用户ID1": "支付成功", "用户ID2": "支付异常", "用户ID3": "支付超时", "用户ID4": KeyError("参数有误"), # 能够返回异常 } return param_data[param] payment = Payment() # 2. 建立Mock对象, 做为Payment的实例方法 payment.pay = mock.Mock(side_effect=parameter_return_data) # 3. 当调用pay方法时, 会返回指定的值 # 4. 不一样的断言方式 # a. assert_called() mock方法至少调用一次 # 若是还未调用, 则返回 AssertionError: Expected 'None' to have been called. # 若是已经调用, 则返回None print(payment.pay("用户ID1")) # 返回结果: 支付成功 # print(payment.pay.assert_called()) # 返回结果: None # b. assert_called_once() mock方法只调用一次 # 若是调用超过一次则返回 AssertionError: Expected 'None' to have been called. # 不然返回None print(payment.pay.assert_called_once()) # 返回结果: None # c. assert_called_with() 断言mock方法已经携带某个参数调用了 # 若是没有携带某个参数调用, 那么会断言失败 print(payment.pay.assert_called_with("用户ID1")) # 返回结果: None # d. assert_called_once_with() 断言mock方法已经携带某个参数调用了一次 # 若是没有携带某个参数调用一次的话, 那么会断言失败 print(payment.pay.assert_called_once_with("用户ID1")) # 返回结果: None # e. assert_any_call() 有携带参数(有便可)调用过 # f. assert_not_called() 断言mock方法从未调用过
若是对python自动化测试、web自动化、接口自动化、移动端自动化、大型互联网架构技术、面试经验交流等等感兴趣的老铁们,能够关注我。我会不按期的发放免费的资料连接,这些资料都是从各个技术网站搜集、整理出来的,若是你有好的学习资料能够私聊发我,我会注明出处以后分享给你们。欢迎分享,欢迎评论,欢迎转发。须要资料的同窗能够关注个人微头条获取资料连接。ide