[英]mock import in Python 2.7
我有一個格式的導入:
from a.b.c.d import x
在 foo.py 中。 我正在測試 bla.py,它不直接導入 foo.py,而是在其方法之一中間接導入。 就像是:
bla.m1() --> bla2.m2() --> foo.m3()
在我的測試環境中,包“a”不可用,我想模擬它,以便在測試期間導入不會失敗。 根據How to mock an import ,我可以使用:
import sys
from unittest.mock import Mock
sys.modules['a.b.c.d'] = Mock()
如果我使用 Python 3,導入在測試代碼中工作,但是當我使用 Python 2.7(和外部模擬庫)時它會失敗。 為什么? 我怎樣才能讓它在 Python 2.7 中工作?
對於 Python 2.7,您需要將模擬模塊的每個級別顯式創建為“真實”的東西——因為 python 檢查對象是否存在(即使它實際上沒有對它做任何事情。
最簡單的選擇是也讓它們Mock
方法,以防你想測試它們:
import sys
from mock import Mock
sys.modules['a'] = Mock()
sys.modules['a.b'] = Mock()
sys.modules['a.b.c'] = Mock()
from a.b.c import d
print(d)
<Mock name='mock.d' id='140035843407120'>
但是,以下內容也完全有效:
import sys
from mock import Mock
sys.modules['a'] = 'cat'
sys.modules['a.b'] = 1
sys.modules['a.b.c'] = Mock()
from a.b.c import d
print(d)
<Mock name='mock.d' id='1402443407120'>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.