Burlarse de módulos importados en Python

Estoy intentando implementar pruebas unitarias para la función que utiliza objetos externos importados.

Por ejemplo, helpers.py es:

import os import pylons def some_func(arg): ... var1 = os.path.exist(...) var2 = os.path.getmtime(...) var3 = pylons.request.environ['HTTP_HOST'] ... 

Así que cuando estoy creando una prueba unitaria para ello, hago algunas burlas (minimock en mi caso) y sustituyo las referencias a pylons.request y os.path:

 import helpers def test_some_func(): helpers.pylons.request = minimock.Mock("pylons.request") helpers.pylons.request.environ = { 'HTTP_HOST': "localhost" } helpers.os.path = minimock.Mock(....) ... some_func(...) # assert ... 

Esto no se ve bien para mí.

¿Hay alguna otra forma o estrategia mejor para sustituir funciones / objetos importados en Python?

Bueno, en minimock hay un paradigma más fácil para esto que lo que está usando arriba:

 >>> from minimock import mock >>> import os.path >>> mock('os.path.isfile', returns=True) 

Ver http://pypi.python.org/pypi/MiniMock#creating-mocks

Una vez que hagas eso, cualquier módulo que haga os.path.isfile("blah") recuperará True . No necesita ir y reasignar explícitamente el espacio de nombres del módulo bajo prueba.

Utilice la biblioteca de burlas de voidspace y su capacidad de parcheo / envoltura.

http://www.voidspace.org.uk/python/mock/patch.html