这篇文章主要介绍Python Mock模块原理是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
一、mock是什么?
英译中含义有:虚假的; 不诚实的; 模仿的; 模拟的 这个意思
这个库的主要功能就是模拟一些事务
官方解释:Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为
二、为什么要用mock?
举例:
假设你开发一个项目,里面包含了一个登录模块,登录模块需要调用身份证验证模块中的认证函数,该认证函数会进行值的返回,然后系统根据这个返回值来做判断是否能进行登录。但是身份证验证模块中的认证函数只有在正式上线的系统上才提供。公司内部的测试环境或者开发环境上不提供。
如果此时需要进行登录模块的业务测试或接口测试,该如何做?
方法一:
搭建一个测试服务器,在测试的时候,让认证函数和这个测试服务器交互,返回值给登录模块;
缺点:
1、测试服务器可能不好搭建,或者搭建效率很低;
2、搭建的测试服务器可能无法返回所有可能的值,或者需要大量的工作才能达到这个目的。
方法二:
使用mock函数模拟即可。
三、mock应用
3.1 mock安装
在Python 3.3以前的版本中,需要另外安装mock模块,可以使用pip命令来安装:
pip install mock
从Python 3.3开始,mock模块已经被合并到标准库中,被命名为unittest.mock,可以直接import进来使用:
from unittest import mock
备注:目前Python 3.3之后的版本,也可以使用第一种方式应用mock
3.2 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先返回所需要的数据。
3.3 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 Mock模块原理是什么的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。