Python 对实例方法使用Mock.side_效果

Python 对实例方法使用Mock.side_效果,python,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):

我试图在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

    ...
但是,当调用Item.exists()时,我会在副作用函数中结束,但会得到一个空的参数列表


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

看起来这就是原因:


也就是说,通过调用mock.patch,我将实例方法变成了类方法。

这是正确的,。但在这种情况下,最好删除您的问题或将其标记为重复。顺便说一句,如果你觉得链接的答案有用,你可以向上投票:)。还有一件事:
mock\u item\u exists
是一个staticmethod,而不是classmethod。