怎么用python写仿真代码_使用Python来写mock代码(桩代码)-其实很简单

一、使用Python来写mock代码🔨🔨

1.Mock基本用法

使用Mock能创建你能访问(模拟)的属性和方法

指定类或者函数的返回值和断言方式

创建handle_mock_01.py文件

# 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())

2.不同的参数返回不同的值

创建handle_mock_02.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方法时, 会返回指定的值

print(payment.pay("用户ID1")) # 返回结果: 支付成功

print(payment.pay("用户ID2")) # 返回结果: 支付异常

print(payment.pay("用户ID3")) # 返回结果: 支付超时

print(payment.pay("用户ID4")) # 返回结果: '参数有误'

3.传参个数

创建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'

4.断言方式

创建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处理Mock的常用操作

对于使用Python写mock代码有帮助

本文为可优原创, 如需转载请联系本人。有不足之处, 欢迎指点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值