Mock模块

本文介绍Mock模块的概念以及基本使用方法

模拟函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def zhifu():
'''假设这里是一个支付的功能,未开发完
支付成功返回:{"result": "success", "reason":"null"}
支付失败返回:{"result": "fail", "reason":"余额不足"}
reason返回失败原因
'''
pass

def zhifu_statues():
'''根据支付的结果success or fail,判断跳转到对应页面'''
result = zhifu()
print(result)
try:
if result["result"] == "success":
return "支付成功"
elif result["result"] == "fail":
print("失败原因:%s" % result["reason"])
return "支付失败"
else:
return "未知错误异常"
except:
return "Error, 服务端返回异常!"

测试用例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import temple
import unittest
from unittest import mock


class Test_zhifu_status(unittest.TestCase):
# 单元测试用例

@mock.patch('temple.zhifu')
def test_suc(self, mock_zhifu):
'''测试支付成功场景'''
# 方式一:mock一个支付成功的数据
# temple.zhifu = mock.Mock(return_value={'result': "success", "reason": "null"})

# 方式二:mock.path装饰器模拟返回结果
mock_zhifu.return_value = {'result': "success", "reason": "null"}
# 根据支付结果测试页面跳转
status = temple.zhifu_statues()
print(status)
self.assertEqual(status, "支付成功")

@mock.patch('temple.zhifu')
def test_fail(self, mock_zhifu):
'''测试支付失败场景'''
# mock一个支付成功的数据
mock_zhifu.return_value = {"result": 'fail', "reason": "余额不足"}
# 根据支付结果测试页面跳转
status = temple.zhifu_statues()
self.assertEqual(status, "支付失败")


if __name__ == '__main__':
unittest.main()

模拟类的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Zhifu:
def zhifu(self):
'''假设这里是一个支付的功能,未开发完
支付成功返回:{"result": "success", "reason":"null"}
支付失败返回:{"result": "fail", "reason":"余额不足"}
reason返回失败原因
'''
pass

class Status:
def zhifu_statues(self):
'''根据支付的结果success or fail,判断跳转到对应页面'''
result = Zhifu().zhifu()
print(result)
try:
if result["result"] == "success":
return "支付成功"
elif result["result"] == "fail":
print("失败原因:%s" % result["reason"])
return "支付失败"
else:
return "未知错误异常"
except:
return "Error, 服务端返回异常!"

测试用例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import temple
import unittest
from unittest import mock


class Test_zhifu_status(unittest.TestCase):
# 单元测试用例

@mock.patch('temple_class.Zhifu')
def test_suc(self, mock_Zhifu):
'''测试支付成功场景'''

# 方式二:mock.path装饰器模拟返回结果
a = mock_Zhifu.return_value # 先返回实例,对类名称替换
a.zhifu.return_value = {'result': "success", "reason": "null"}
# 根据支付结果测试页面跳转
status = temple.zhifu_statues()
print(status)
self.assertEqual(status, "支付成功")

@mock.patch('temple.zhifu')
def test_fail(self, mock_zhifu):
'''测试支付失败场景'''
# mock一个支付成功的数据
mock_zhifu.return_value = {"result": 'fail', "reason": "余额不足"}
# 根据支付结果测试页面跳转
status = temple.zhifu_statues()
self.assertEqual(status, "支付失败")


if __name__ == '__main__':
unittest.main()

小结:函数与方法做个比较即可得出,多出一步 先返回实例的过程 a = mock_Zhifu.return_value

-------------The End-------------

本文标题:Mock模块

文章作者:Naqin

发布时间:2020年08月03日 - 19:08

最后更新:2020年08月03日 - 20:08

原始链接:https://chennq.top/单元测试/20200803-Learn-mock-1.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Naqin wechat
欢迎看官加我微信!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%