字典的模拟获取方法 - 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
我正在使用 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