[英]Mocking imported modules in 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中導入的函數/對象?
使用voidspace的模擬庫和它的修補/包裝能力。
好吧,在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
。 您無需明確重新分配測試模塊的命名空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.