python中的测试双倍平台(mock、stub和dummies)

ludibrio的Python项目详细描述


欢迎来到卢迪布里奥

http://ludibriar.appspot.com/_static/img/logo.png
Author:
Contributors:

安装

Ludibrio在PYPI注册。如果您有pip、setuptools或Distribute,则可以使用以下命令安装mock:

$ sudo easy_install ludibrio

下载

最新的官方版本是3.0.2。以下是获取方法:

http://pypi.python.org/pypi/ludibrio/3.0.2

文件

有关当前文档,请参见http://ludibriar.appspot.com/

参与其中!

ludibrio的开发可以在github上查看和跟踪:

http://github.com/nsigustavo/ludibrio

使用“git”检索源代码:

$ git clone git://github.com/nsigustavo/ludibrio.git

以“开发模式”安装软件包并使用doctestcommand运行测试:

$ sudo easy_install doctestcommand
$ git clone git://github.com/nsigustavo/ludibrio.git
$ cd ludibrio
$ sudo python setup.py develop
$ cd ludibrio
$ doctest

简而言之

测试双重对象是为了测试目的而模拟真实对象行为的伪对象

模拟

mock是预先编程的对象,具有期望值,这些期望值形成了它们期望接收的调用的规范:

>>> from ludibrio import Mock
>>> with Mock() as MySQLdb:
...     con = MySQLdb.connect('server', 'user', 'XXXX')
...     con.select_db('DB') >> None
...     cursor = con.cursor()
...     cursor.execute('select * from numbers') >> None
...     cursor.fetchall() >> [1,2,3,4,5]
>>> con = MySQLdb.connect('server', 'user', 'XXXX')
>>> con.select_db('DB')
>>> cursor = con.cursor()
>>> cursor.execute('select * from numbers')
>>> cursor.fetchall()
[1, 2, 3, 4, 5]

>>> MySQLdb.validate() #passed

存根

存根为测试期间进行的方法调用提供预定义的答案:

>>> from ludibrio import Stub
>>> with Stub() as x:
...     x.anything() >> 'response'
>>> x.anything()
'response'

任何外部模块的简单模拟或存根

ludibrio还提供了replace模式,这基本上意味着如果将“from…import…”语句定义为“with”作用域,则replay机制将返回一个模拟对象来替换整个python解释器(包括任何模块等)命名空间中的原始对象。下面有一个简单的例子来说明如何使用它:

>>> from ludibrio import Stub

>>> with Stub() as time:
...     from time import time
...     time() >> 171
>>> from time import time
>>> time()
171

代理

两个LudiiRo在其他嘲弄系统中没有发现的强大特性是代理现有对象或修补真实实例或类的能力。

当一个对象被代理时,Ludibrio创建一个测试双对象,该对象保存对实际对象的引用,允许表达式通过它(被嘲笑或否,默认情况下或根据请求):

>>> from os.path import splitext
>>> with Stub(proxy=splitext) as splitext:
...     splitext('ludibrio/stubed.py') >> ('/temp/temp','.temp')
>>> splitext('mock.py')
('mock', '.py')
>>> splitext('ludibrio/stubed.py')
('/temp/temp', '.temp')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在ArrayList中比较数字   java在Kotlin中使异步调用同步   让“Scala编程”junit示例在IntelliJ中工作的java问题   java Servlet侦听器未在ContextListener中设置属性   将Microsoft SQL Server数据库连接到我的Java项目   加载资源时出现java“需要注册工厂”异常   java如何使用POI检查excel中的重复记录?   java如何更改机器生成的代码   java如何确保重写的方法是同步的   用Spring编写Hibernate时的java XML奥秘   java管理mysql数据库中存储的用户权限   java如何运行。来自Javascript的jar方法   java我想在Web应用程序中进行身份验证&对桌面应用程序使用相同的凭据。我该怎么做?