簡體   English   中英

在Python中模擬導入的模塊

[英]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的模擬庫和它的修補/包裝能力。

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

好吧,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM