Skip to main content
Help us improve Python packaging – donate today!

Platform for test doubles in Python (mocks, stubs, fakes, and dummies)

Project Description



Gustavo Rezende <>


Ludibrio’s development may be viewed and followed on github:
Retrieve the source code using ‘git’:
git clone git://



$ sudo easy_install ludibrio


Mocks are objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

A Mocker or Stub instance uses the ‘with’ statement to record and replay expectations:

>>> from ludibrio import Mock

>>> with Mock() as MySQLdb:
...     con = MySQLdb.connect('servidor', ' usuario', 'senha')
...     con.select_db('banco de dados') >> None
...     cursor = con.cursor()
...     cursor.execute('ALGUM SQL') >> None
...     cursor.fetchall() >> [1,2,3,4,5]
>>> con = MySQLdb.connect('servidor', ' usuario', 'senha')
>>> con.select_db('banco de dados')
>>> cursor = con.cursor()
>>> cursor.execute('ALGUM SQL')
>>> cursor.fetchall()
[1, 2, 3, 4, 5]

>>> MySQLdb.validate() #passed


Stubs provide pre-defined answers to method calls made during a test:

>>> from ludibrio import Stub

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

>>> x.anything()

Trivial mocking or stubing for any external module

Ludibrio also offers a replace mode, which basically means if a “from … import …” statement is defined into a ‘with’ scope, the replay mechanism will return a mock object to replace the original object in namespace of the whole Python interpreter (including any modules, etc). There’s a simple example below to illustrate how use it:

>>> from ludibrio import Stub

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

>>> from time import time
>>> time()


Two Ludibrio’s powerful features that aren’t found in other mocking systems is the ability of proxying existing objects, or patching a real instance or class.

When an object is proxied, Ludibrio create a Test Double object holding a reference to the real object, allowing expressions passthrough to it(mocked or not, and by default or on request).

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

Release history Release notifications

History Node


History Node


History Node


History Node


History Node


This version
History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
ludibrio-2.0.linux-i686.tar.gz (14.6 kB) Copy SHA256 hash SHA256 Dumb Binary any Jun 2, 2010
ludibrio-2.0-py2.5.egg (11.5 kB) Copy SHA256 hash SHA256 Egg 2.5 Oct 21, 2009
ludibrio-2.0.tar.gz (5.7 kB) Copy SHA256 hash SHA256 Source None Oct 21, 2009

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page