【问题标题】:Mock get method of dictionary - Python字典的模拟获取方法 - Python
【发布时间】:2021-02-25 10:50:55
【问题描述】:

我正在使用 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 值?

【问题讨论】:

  • m.get.side_effect = d.get?
  • 这有什么意义?你在做什么,你认为嘲笑 dict 可以解决这个问题?除此之外,@rdas 是正确的,MagicMock 除了返回子模拟之外没有其他行为。您必须处理的任何行为分歧。
  • @Masklinn 我的代码中有一个字典对象正在使用 get 方法,我需要模拟它的值,而 get.return_value 没有完成。

标签: python python-3.x python-unittest


【解决方案1】:

__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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多