时间是个常数,但也是个变数。勤奋的人无穷多,懒惰的人无穷少。
举例:
假设你开发一个项目,里面包含了一个登录模块,登录模块需要调用身份证验证模块中的认证函数,该认证函数会进行值的返回,然后系统根据这个返回值来做判断是否能进行登录。但是身份证验证模块中的认证函数只有在正式上线的系统上才提供。公司内部的测试环境或者开发环境上不提供。
如果此时需要进行登录模块的业务测试或接口测试,该如何做?
pip install mock
from unittest import mock
备注:目前Python 3.3之后的版本,也可以使用第一种方式应用mock
from unittest import mock
def add(num1,num2):
return num1 + num2 # pass
add_value = mock.Mock(return_value=200) # 创建mock对象
add = add_value # 把mock对象赋值给add方法
print( add(10,20) )
从上述代码执行可以看出,假使我把add()方法的实现改为pass,暂时还未实现,也可以通过mock先返回所需要的数据。
import requests
def send_request(url):
r = requests.get(url)
return r.status_code
def visit_newdream():
return send_request("http://www.hnxmxit.com/")
print( visit_newdream() )
上述代码是访问我们公司的官网,假设该官网访问请求还没被实现,此时 visit_newdream() 方法需要 send_request 返回响应状态码。这个时候可以用到mock。
# 当前文件名为 mock_demo.py
import unittest
from unittest import mock
import requests
import mock_demo
def send_request(url):
r = requests.get(url)
return r.status_code
def visit_newdream():
return send_request("http://www.hnxmxit.com/")
class TestClient(unittest.TestCase):
def test_success_request(self):
success_send = mock.Mock(return_value=‘200‘)
mock_demo.send_request = success_send
self.assertEqual(mock_demo.visit_newdream(), ‘200‘)
if __name__=="__main__":
unittest.main()
上述代码完成了mock的简单应用,由于mock_demo.send_request = success_send 把mock对象赋值给了方法,使得方法再次调用的时候使用了mock的方法完成把模拟返回值传递给mock_demo.visit_newdream()方法。
python常识系列16-->python自带的Mock模块使用
原文:https://www.cnblogs.com/dream66/p/13199395.html