我有一個模塊,我需要測試要求對進口功能,但我不能調用此函數因各種原因模擬功能。所以我嘲笑這個功能,但即使嘲笑它調用導入。呼籲進口
比如我測試mod1.py,看起來像這樣:
import os
def bar():
return 'foo'
def dont_call():
os.listdir("C:\\tmp")
dont_call()
我的測試看起來是這樣的:
import mock
@mock.patch("mod1.dont_call")
def test_mod1(mock_dont_call):
import mod1
assert mod1.bar()=='foo'
if __name__=="__main__":
test_mod1()
問題是os.listdir被調用。
我不能改變MOD1,所以我能做些什麼?
我使用python2.7。
爲了把這一背景下我測試打開進口一個數據庫連接,我不同意,但我可以看到它背後的原因的模塊。不幸的是我無法在我的QA機器上訪問這個數據庫。
爲什麼「你好」 *不*打印? – kindall
您無法模擬在全局級別調用的函數。簡單的答案是*不這樣做*。下面Ramu的答案向你展示了一種方法,如果'dont_call()'應該只能在作爲腳本運行時執行。 –
@MartijnPieters這將是對周圍的任何東西編寫測試使用它初始化模塊範圍主要實例,例如博格/單樣模式的問題,核心'logging'模塊和日誌記錄管理器實例。是的,如果可以避免的話,這可能會更好,但它並不總是。 –