字典的模拟获取方法 - Python

Mock get method of dictionary - Python

我正在使用 MagicMock 创建一个模拟对象并使它的行为像这样的字典:

>>> from unittest import mock
>>> m = mock.MagicMock()
>>> d = {'foo': 'bar'}
>>> m.__getitem__.side_effect = d.__getitem__
>>> m['foo']
'bar'
>>> m.get('foo')
<MagicMock name='mock.get()' id='140668601658096'>

如何使用 get 方法获取 bar 值?

__getitem__魔法方法和get方法不一样

在您的示例中,您仅模拟了 __getitem__ 魔术方法,因此 m['foo'] 按预期工作。

如果你想使用 get() 方法,你也应该模拟它。

模拟get()方法:

from unittest import mock
m = mock.MagicMock()
d = {'foo': 'bar'}
m.get.side_effect = d.get
print(m.get('foo'))

输出:

>>> python3 test.py
bar