python中的测试双倍平台(mock、stub和dummies)
ludibrio的Python项目详细描述
欢迎来到卢迪布里奥
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')