2010-02-27 111 views
4

我试图为使用导入的外部对象的函数实现单元测试。在Python中嘲笑导入的模块

例如helpers.py是:

import os 
import pylons 

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

所以,当我创建单元测试它,我做了一些嘲讽(在我的情况minimock) 和更换引用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中的导入函数/对象?

回答

1

那么,在minimock有这个更容易的模式比你上面使用的是什么:

>>> 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。你不需要去明确地重新分配被测模块的命名空间。