美文网首页python学习
Python学习打call第七十五天:mock介绍

Python学习打call第七十五天:mock介绍

作者: 暖A暖 | 来源:发表于2019-04-30 09:35 被阅读0次

    1.mock概念

    mock又叫模拟,是Python中一个用于测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为;
    从Python 3.3开始,mock模块已经被合并到标准库中,被命名为unittest.mock,可以直接import进来使用。Mock对象就是mock模块中的一个类的实例,这个类的实例可以用来替换其他的Python对象,来达到模拟的效果;

    2.Mock和MagicMock

    • Mock是一个灵活的模拟对象,用于替换整个代码中存根和测试双精度的使用,模拟是可调用的,并在访问它们时创建属性作为新模拟;

    • MagicMock是一个Mock预先创建并准备使用的所有魔术方法的子类。MagicMock是懒加载的,在没调用magic方法的时候,是不存在这个方法的;

    3.mock 使用

    场景:当开发一个项目的时候,一个同事开发了数据清洗功能,另外一个同事需要拿到清洗后的数据,完成数据展示。那么这个时候,数据清洗和数据展示这两个功能就存在依赖性,必须是数据清洗完毕之后才能进行数据展示;

    首先我们需要创建一个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()函数的返回结果

    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()
    
    • 先找到要替换的对象;

    • 实例化mock类得到一个mock对象,并且设置这个对象的行为;

    • 使用这个mock对象替换掉我们想替换的对象;

    • 编写测试代码,进行断言;

    参考:https://www.9xkd.com/user/plan-view.html?id=2814187020

    相关文章

      网友评论

        本文标题:Python学习打call第七十五天:mock介绍

        本文链接:https://www.haomeiwen.com/subject/hygynqtx.html