码迷,mamicode.com
首页 > 编程语言 > 详细

Python模拟数据工具哪些比较好用

时间:2016-05-30 14:49:30      阅读:440      评论:0      收藏:0      [点我收藏+]

标签:Python

今天给大家推荐两款基本的Python模拟数据工具:mock和pytest monkeypatch。

为什么要模拟数据?

我们的应用中有一些部分需要依赖外部的库或对象。为了隔离开这部分,我们需要代替这些外部依赖,因而就用到了模拟数据。我们模拟外部的API来产生特定的行为,比如说返回符合之前定义的恰当的返回值。

模拟函数

我们有一个function.py的模块:


然后我们来看下如何将其与Mock库结合使用的:

这里发生了什么?1-4行是为了兼容python 2和3来引入的代码,在python 3中mock是一个标准库,而在python 2中你需要手动安装(pip install mock)。

在 第13行对square函数调用mock的Patch方法,一定要在使用该函数的地方调用patch方法。比如,我将在程序自身中调用square(5) 函数,因而我在__main__中使用patch,举例来说python tests/test_function.py。而如果我使用pytest的 话,那么我将使用test_function.square来替换此处的__main__.square。

在第18-19行,我针对square和cube方法调用了patch函数,因为它们将在main函数中被使用。最后的两个assert语句是为了确保mock被恰当地使用。

同样也可以用monkeypatching来完成此工作:


你能看到我使用monkeypatch.setattr来针对给定的函数设置返回值,同样我也需要在恰当的地方调用monkeypatch函数。

模拟类

我有一个名叫square的模块:


使用方法如下:

在第13行我对类Square进行patch,而15和16行表示了mocking的实例,首先mocked_instance是一个模拟对 象,针对mock.calculate_area我添加了return_value的值为1.在23行我使用MagicMock方法,它同样是一个标准的 mock类,只是它可以从一个给定的对象中检索出相应的方法。最后我使用patch.object来模拟Square类中的方法。

Pytest中代码如下:


这里的问题在于test_mocking_class_methods在python 3中工作正常,但是python 2中却不行。目前我还没有太想清楚这一点,希望你能帮助我!

所有的示例都能在这里找到。

顺便再给大家推荐一个Python视频教程:http://www.maiziedu.com/course/python/里面有各种Python基础知识讲解和Python开发项目,非常适合菜鸟和Python程序员看。

Python模拟数据工具哪些比较好用

标签:Python

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
麦子学院
加入时间:2015-07-08
  关注此人  发短消息
文章分类
麦子学院”关注的人------(0
麦子学院”的粉丝们------(0
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!