我正在尝试为使用导入的外部对象的函数实现单元测试。
例如 helpers.py 是:
import os
import pylons
def some_func(arg):
...
var1 = os.path.exist(...)
var2 = os.path.getmtime(...)
var3 = pylons.request.environ['HTTP_HOST']
...
所以,当我为它创建单元测试时,我会做一些嘲弄(在我的情况下是最小的) 并替换对pylons.request和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
...
这对我来说不太好。
在Python中替换导入的函数/对象还有其他更好的方法或策略吗?
答案 0 :(得分:2)
使用voidspace的模拟库以及它的修补/包装功能。
答案 1 :(得分:1)
嗯,在最小化方面,有一个比你上面使用的更简单的范例:
>>> from minimock import mock
>>> import os.path
>>> mock('os.path.isfile', returns=True)
请参阅http://pypi.python.org/pypi/MiniMock#creating-mocks
执行此操作后,执行os.path.isfile("blah")
的任何模块都将返回True
。您无需明确重新分配测试模块的命名空间。