使用 Mock.side_effect 作为实例方法

Gra*_*ler 5 python

我正在尝试用副作用模拟 Python 中的实例方法。我希望/期望使用初始“​​self”参数来调用我的副作用,我可以用它来确定返回值。

所以我有这样的事情:

import mock

class TestCases(unittest.TestCase):

  @mock.patch('Item.exists')
  def test_foo(self, mock_item_exists):

    def item_exists_side_effect(*args, **kwargs):
      # I expect args[0] here to be supplied and to refer to the item
      _self = args[0]
      return _self.name == 'bar'

    mock_item_exists.side_effect = item_exists_side_effect

    ...
Run Code Online (Sandbox Code Playgroud)

但是,当调用 Item.exists() 时,我最终会进入副作用函数,但参数列表为空。

这是预期的吗?难道我做错了什么?

Gra*_*ler 2

看起来原因是这样的:

为什么在调用模拟方法时,模拟会忽略传递给模拟方法的实例/对象?

即通过调用mock.patch我将实例方法变成了类方法。