前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >控制你的数据——Python mock的基本使用

控制你的数据——Python mock的基本使用

作者头像
用户5521279
发布2020-02-21 16:25:01
2.2K0
发布2020-02-21 16:25:01
举报
文章被收录于专栏:搜狗测试搜狗测试

Mock是什么

Mock即模拟的意思。在Python中,提供了基于单元测试的mock模块,它的主要作用是使用mock对象替代掉指定的Python对象,以达到模拟对象功能的行为。 在单元测试实际项目中,会遇到如下问题:

  • 接口间的相互依赖
  • 数据库中真实数据的模拟
  • 第三方接口调用

但由于单元测试仅针对当前单元进行测试,这就要求所有的内部或者外部依赖都应该是稳定的,采用mock的方法模拟跟本单元依赖的其他单元,可以将测试重点放在当前单元功能,排除外界因素干扰,提升测试精准度。

Mock基本用法

Mock对象是mock模块中最重要的概念。Mock对象就是mock模块中的一个类的实例,这个类的实例可以用来替换其他的Python对象,来达到模拟的效果。Mock类的定义如下:

可以看到,Mock对象其实就是Python的一个类。 mock模块在Python3中是集成在unittest模块中的,我们先看一个简单的例子,用来说明mock模块的基本用法。 比如获取天气信息接口:

然后我们使用mock对象在单元测试中分别测试正常返回和异常返回的情况:

通常情况下,Mock对象的一般用法是这样的: 1、确定要测试的函数,或者类,或者类实例,作为mock的对象;我们要测试的是get_notify这个函数,这个函数依赖于send_request这个函数,所以需要替换的是send_request这个函数。 2、实例化Mock类得到一个mock对象,并设置这个mock对象的行为,比如被调用的时候返回什么值,被访问成员的时候返回什么值等;通过return_value设置mock对象的返回值。 3、使用2中的mock对象,替换掉1中确定的对象;替换掉notify.send_request。 4、可以开始写测试代码,这个时候我们可以保证被替换掉的对象在测试用例执行过程中行为和我们预设的一样。

Mock静态方法

有些函数可能不属于你,你也不在意它的内部实现而只是想调用这个函数然后得到结果而已,这种时候就可以用 patch 方式来模拟。 如果调用的外部代码是面向过程的风格,也就是一个一个函数,那么就用 mock.patch 就可以;如果是面向对象的风格,比如你调用的只是一个类中的某个方法,那么要用 mock.patch.object 。 上述的单元测试案例,使用patch时需要注意,它是一个装饰器,需要把你想模拟的函数写在里面,然后在后面的单元测试案例中为它赋一个具体实例,再用 return_value 来指定模拟的这个函数希望返回的结果就可以了,后面就是正常单元测试代码。实现如下:

结束语

本文的主要目的是介绍mock能做什么,当你知道了mock能做什么之后,要如何学习并掌握mock呢?最好的方式就是查看阅读官方文档,并在自己的单元测试中熟练控制外部服务和依赖。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mock是什么
    • Mock基本用法
      • Mock静态方法
        • 结束语
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档