一、mock是什么?
英译中含义有:虚假的; 不诚实的; 模仿的; 模拟的 这个意思
这个库的主要功能就是模拟一些事务
官方解释:Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为
二、为什么要用mock"color: #ff0000">三、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()方法。
四、小结
- 此文基础的介绍了mock的入门;
- 读者实操出来有一定的想法后完全可以应用到接口测试和单元测试过程中去。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。