mock又叫模拟,是Python中一个用于测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为;
从Python 3.3开始,mock模块已经被合并到标准库中,被命名为unittest.mock,能够直接import进来使用。Mock对象就是mock模块中的一个类的实例,这个类的实例能够用来替换其余的Python对象,来达到模拟的效果;html
场景:当开发一个项目的时候,一个同事开发了数据清洗功能,另一个同事须要拿到清洗后的数据,完成数据展现。那么这个时候,数据清洗和数据展现这两个功能就存在依赖性,必须是数据清洗完毕以后才能进行数据展现;函数
首先咱们须要建立一个function1.py的模块,而后在这个模块中定义一个数据清洗方法和一个数据展现方法测试
# 数据清洗功能没有开发完毕 def data_parse(): pass # 数据展现功能 def data_show(): # ret为待mock的数据 # return是字典模型 ret = data_parse() try: if ret.get('result') == "success": return "data parse success" elif ret.get('result') == "fail": print("data parse failed: {}".format(ret.get('reason'))) return "data parse failed" else: return "Unknow Reason" except: return "Server Unknow Reason"
建立一个Test.py模块,在这模块里面建立一个TestData类,继承TestCase类,在这个类中模拟data_parse()函数的返回结果code
from unittest import mock from unittest import TestCase import unittest import function1 class TestData(TestCase): def test_print1(self): function1.data_parse = mock.MagicMock(return_value={"result": "success", "reason":"null"}) statues = function1.data_show() print(statues) self.assertEqual(statues, "data parse success") def test_print2(self): function1.data_parse = mock.MagicMock(return_value={"result": "fail", "reason": "Data Error"}) statues = function1.data_show() self.assertEqual(statues, "data parse failed") if __name__ == "__main__": unittest.main()
参考:https://www.9xkd.com/user/plan-view.html?id=2814187020orm