Python-模拟导入字典

teo*_*one 3 python dictionary unit-testing patch mocking

在要测试的代码顶部,我有一个类似的导入:

from resources import RESOURCES
Run Code Online (Sandbox Code Playgroud)

RESOURCES值字典在哪里。

如何在测试中模拟它?

我想要的是,无论真实模块中的内容是什么,都返回一个众所周知的字典。

例如,在一项测试中,我希望RESOURCES成为:

{
  'foo': 'bar'
}
Run Code Online (Sandbox Code Playgroud)

而在另一个测试中,我希望它是:

{
  'something': 'else'
}
Run Code Online (Sandbox Code Playgroud)

teo*_*one 5

patchRESOURCE对象的使用方式是:

from default import RESOURCES
from mock import patch

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

请注意,您需要在测试套件中导入要修补的字典

也可以使用装饰器语法:

from default import RESOURCES
from mock import patch

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