返回顶部
首页 > 资讯 > 精选 >封装mock
  • 710
分享到

封装mock

2023-06-02 06:06:22 710人浏览 八月长安
摘要

1.patch装饰器的概念patch装饰器是mock第二种实现数据模拟的方式,patch()充当函数装饰器,类装饰器或上下文管理器,可用于处理测试范围内的修补模块和类级属性;2.patch装饰器语法语法:unittest.mock.patc

1.patch装饰器的概念

  • patch装饰器是mock第二种实现数据模拟的方式,patch()充当函数装饰器,类装饰器或上下文管理器,可用于处理测试范围内的修补模块和类级属性;

2.patch装饰器语法

  • 语法:unittest.mock.patch(target,new = DEFAULT,spec = None,create = False,spec_set = None,autospec = None,new_callable = None,** kwarg )

  • 参数target 为’package.module.classname’格式的字符串,如果参数new被省略,那么target 被MagicMock代替;

  • 如果patch()用作装饰器并且省略new,则创建的mock将作为额外参数传递给装饰函数,如果patch()用作上下文管理器,则上下文管理器返回创建的mock;

  • New_Callable参数允许指定将被调用以创建新对象的其他类或可调用对象,默认情况下,使用magicMock。

3.patch装饰器实现数据模拟

修改Test.py文件中的TestData类,在测试用例前加上一个@mock.patch()装饰器

from unittest import mockfrom unittest import TestCaseimport unittestimport function1class TestData(TestCase):    # patch装饰器    @mock.patch('function1.data_parse')    def test_print1(self, mock_data_parse):        mock_data_parse.return_value = {"result": "success", "reason":"null"}        statues = function1.data_show()        print(statues)        self.assertEqual(statues, "data parse success")    @mock.patch('function1.data_parse')    def test_print2(self, data_parse):        data_parse.return_value = {"result": "fail", "reason": "Data Error"}        statues = function1.data_show()        self.assertEqual(statues, "data parse failed")if __name__ == "__main__":    unittest.main()

我们这里模拟的是函数中的数据,如果需要mock的数据是一个类中方法的数据,写法也是一样的,比如function1.py模块中的代码是:

class DataParse:    def data_parse(self):        passclass DataShow:    def data_show(self):        ret = DataParse().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文件中的代码可以这样写:

from unittest import mockfrom unittest import TestCaseimport unittestfrom function1 import DataParse, DataShowclass TestData(TestCase):    # patch装饰器    @mock.patch('function1.DataParse')    def test_print1(self, mock_DataParse):        # 先拿到类的mock实例        dataParse = mock_DataParse.return_value        # 在通过类的mock实例调用方法,对方法返回值进行mock        dataParse.data_parse.return_value = {"result": "success", "reason":"null"}        # 调用data_show        statues = DataShow().data_show()        print(statues)        self.assertEqual(statues, "data parse success")    @mock.patch('function1.DataParse')    def test_print2(self, mock_DataParse):        # 先拿到类的mock实例        dataParse = mock_DataParse.return_value        # 在通过类的mock实例调用方法,对方法返回值进行mock        dataParse.data_parse.return_value = {"result": "fail", "reason": "Data Error"}        # 调用data_show        statues = DataShow().data_show()        print(statues)        self.assertEqual(statues, "data parse failed")if __name__ == "__main__":    unittest.main()=========输出=============data parse successdata parse failed: Data Errordata parse failed

步骤

  • 首先使用@mock.patch()装饰器来装饰你要使用的测试用例,@mock.patch()中需要带一个参数,指定需要mock的函数或者类,和这个类所在的包和模块,例如:@mock.patch(''function1.data_parse''),表示给一个在function1模块中的data_parse函数mock数据;

  • 然后在测试用例中接受一个参数,这个参数是mock哪个函数,就在函数名前加一个mock,例如给data_parse函数mock数据,这个参数名就是mock_data_parse

  • 有了这个参数之后就可以给mock的函数的return_value赋值了。最后就可以进行断言,运行测试了;

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

--结束END--

本文标题: 封装mock

本文链接: https://www.lsjlt.com/news/229071.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 封装mock
    1.patch装饰器的概念patch装饰器是mock第二种实现数据模拟的方式,patch()充当函数装饰器,类装饰器或上下文管理器,可用于处理测试范围内的修补模块和类级属性;2.patch装饰器语法语法:unittest.mock.patc...
    99+
    2023-06-02
  • 封装,封装的原理,Property ,s
    1,封装 ## 什么是封装 what 对外隐藏内部的属性,以及实现细节,并给外部提供使用的接口 学习封装的目的:就是为了能够限制外界对内部数据的方法 注意 :封装有隐藏的意思,但不是单纯的隐藏 python 中属性的权限分为两种:...
    99+
    2023-01-31
    原理 Property
  • java封装类是如何封装的
    在Java中,封装是一种面向对象编程的概念,用于隐藏内部实现细节,并通过公共方法提供对数据的访问和操作。封装类是为了封装基本数据类型...
    99+
    2023-10-23
    java
  • ​SOP封装和SOIC封装有什么区别
    SOP(Small Outline Package)封装和SOIC(Small Outline Integrated Circuit...
    99+
    2023-10-21
    ​SOP SOIC
  • android控件封装 自己封装的dialog控件
    自定义dialog肯定是用的很多了但是感觉每次做都是很乱 单纯完成任务而已,现在封装了一下 以后用到直接copy 先上图: 主activity 代码如下: package c...
    99+
    2022-06-06
    封装 dialog Android
  • uni-app封装请求方法与api封装调用
    封装请求创建request.js文件,把一下内容根据自己的需求更改。 //封装请求方法//声明一个请求函数const api_request=(url, method, parm)=>{ con...
    99+
    2023-09-03
    前端 php 开发语言 javascript vue.js
  • C# SQL封装(四)
    本篇接C# SQL封装(三)在其功能上继续扩展 改操作 , 让我们开始吧。。。。。一 : 构建T-SQL语句(在SQL_Structure.cs中添加一个方法 UPDATE_T_SQL , 用于构建upda...
    99+
    2024-04-02
  • 如何封装ajax
    小编给大家分享一下如何封装ajax,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 以前开发用了很多AJAX的技术比如EXT,prototype,jQuery等...
    99+
    2024-04-02
  • C#封装DBHelper类
    DBHelper从字面上理解为“数据库帮助类”,由于持久层需要与数据库进行交互,因此每次交互的时候都会重复去加载驱动、填写数据库连接信息、建立(获取)数据库连...
    99+
    2024-04-02
  • 多态和封装
    一、多态 术语多态(polymorphism)源自希腊语,意思是“有多种形态”。这大致意味着即便你不知道变量指向的哪种对象,也能够对其执行操作,且操作的行为将随所属的类型而异。例如,假设你要为一个销售食品的电子商务网站创建在线支付系统,...
    99+
    2023-01-30
    多态
  • golang错误封装
    随着Golang的逐渐流行,越来越多的开发者使用此语言进行开发。在代码开发的过程中,错误处理是一件非常重要的事情。在Golang中,开发者可以通过自定义错误类型来提高代码的可读性和可维护性。本文将介绍Golang错误封装的相关知识,希望能够...
    99+
    2023-05-21
  • golang如何封装
    在Go语言中,封装指的是把数据和操作数据的方法绑定在一起,形成一个独立的单元,从而避免外部使用者直接访问数据,保证数据安全和操作的有效性。本文将介绍如何在Go语言中实现封装。可见性控制在Go语言中,可见性控制通过命名来实现。如果一个变量或者...
    99+
    2023-05-19
  • golang怎么封装
    Golang是一门非常优秀的编程语言,它提供了一些非常强大的功能,其中之一就是封装。封装是一种面向对象编程(OOP)的概念,它指的是隐藏对象的内部细节,使得对象只对外暴露必需的行为,提高了代码的安全性和可维护性。在Golang中,封装有多种...
    99+
    2023-05-19
  • python 日志封装
    日志功能描述: 写python项目时,需要用到日志类,需求为:日志信息可配置,提供几种类型不同的配置,并且日志既可以写到文本也可以写到数据库中。 实现时日志类直接使用python的logging,配置信息写到配置文件loggin...
    99+
    2023-01-31
    日志 python
  • Python 封装MySQL类
       以后再也不用每次都重新写啦!    import MySQLdb OperationalError = MySQLdb.OperationalError class MySQL: def _...
    99+
    2023-01-31
    Python MySQL
  • Python 类的封装
    封装(Encapsulation)是对 object 的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用(不是人用眼睛看不到那个代码,除非用某种加密或者混淆方法,造成现实上的困难,但这不是封装)。要了解封装,离不开“私有化”,就...
    99+
    2023-01-31
    Python
  • 【JAVA】为什么要使用封装以及如何封装
    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 前言 Java的封装指的是在一个类中将数据和方法进行封装,使其可以保护起来,只能在该类内部访问,而不允许外部直接访...
    99+
    2023-10-04
    java python 开发语言
  • Python Mock 的入门
    Mock是什么Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的...
    99+
    2023-01-31
    入门 Python Mock
  • java如何封装类
    第一步我们首先需要了解java中的封装指的是什么,封装是一种将抽象性接口的实现细节都包装和隐藏起来的方法,它具有减少耦合,类内部结构可以修改,成员变量精准控制的优点,如下图所示: (...
    99+
    2014-05-30
    java教程 java
  • java 什么是封装
    1、封装的概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。2、好处:(1)只能通过规定的方法访问数据;(2)隐藏类的实例细节,方便修改和实现。3、封装的实现步骤:(1)修改属性...
    99+
    2022-03-31
    java入门 java 封装
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作