2017-06-30 89 views
0

當時我想測試代碼的頂部我有一個像進口:Python的 - 模擬輸入字典

from resources import RESOURCES 

其中RESOURCES是值的字典。

如何在測試中嘲笑它?

我想要的是,無論在真正的模塊中是什麼,都會返回一個衆所周知的字典。

例如,在一個測試中,我想RESOURCES是:

{ 
    'foo': 'bar' 
} 

而在另一個測試中,我希望它是:

{ 
    'something': 'else' 
} 
+0

你是什麼意思「模擬它」? –

+0

你需要「嘲笑」它有多好。你需要測試模塊是否存在,你是否需要僞造該模塊?你只需要一個'RESOURCES'定義,還是你需要'sys.modules'中的假條目? –

+0

您可以添加一個本地(即相同的目錄)模塊'resources.py',其中包含您的模擬'RESOURCES'字典。或者您可以將該模塊放置在其他位置,並將相應的路徑預先添加到'sys.path':'sys.path.insert(0,'/ path/to/resources /')'。 –

回答

0

我去到patchRESOURCE對象是使用方法:

from default import RESOURCES 
from mock import patch 

with patch.dict(RESOURCES, {'foo': 'bar'}, clear=True): 
    assert(RESOUCES['foo'], 'bar') 

注意,您需要導入詞典要在測試套件

修補它也可以使用修飾語法:

from default import RESOURCES 
from mock import patch 

@patch.dict(RESOURCES, {'foo': 'bar'}, clear=True) 
def test(self): 
    self.assert(RESOUCES['foo'], 'bar')