Python 必须使用x实例作为第一个参数调用未绑定的方法f()(改为使用了str实例)

Python 必须使用x实例作为第一个参数调用未绑定的方法f()(改为使用了str实例),python,magicmock,Python,Magicmock,这是我的班级: class GoogleCloudLayer: def deleteMachine(self, machineName): return machineName + ' is dead. (stubbed)' 它的工作原理是: >>> gc = GoogleCloudLayer() >>> gc.deleteMachine('test') test is dead (stubbed) 但是我想在测试中使用,我想让a

这是我的班级:

class GoogleCloudLayer:

    def deleteMachine(self, machineName):
        return machineName + ' is dead. (stubbed)'
它的工作原理是:

>>> gc = GoogleCloudLayer()
>>> gc.deleteMachine('test')
test is dead (stubbed)
但是我想在测试中使用,我想让
assert\u调用,并在其上定义
方法:

from mock import MagicMock
#Stubbing with itself just so it will have the `assert_called_with` method defined on it
GoogleCloudLayer.deleteMachine = MagicMock(side_effect = GoogleCloudLayer.deleteMachine)
但是我得到了

>>> gc = GoogleCloudLayer()
>>> gc.deleteMachine('test')
unbound method deleteMachine() must be called with GoogleCloudLayer instance as first argument (got str instance instead)
如果我将生产代码更改为
gc.deleteMachine(gc,'test')
它会工作。
但是我们不希望这样,是吗?

lambda
在这种情况下很有用,请尝试:

GoogleCloudLayer.createMachine = MagicMock(side_effect = lambda *args, **kwargs: GoogleCloudLayer.createMachine)

令人惊叹的!我把它作为答案,我会同意的。