Несвязанный метод f() должен быть вызван с экземпляром x в качестве первого аргумента (вместо этого получен экземпляр str)

Вот мой класс:

class GoogleCloudLayer:

    def deleteMachine(self, machineName):
        return machineName + ' is dead. (stubbed)'

Оно работает:

>>> gc = GoogleCloudLayer()
>>> gc.deleteMachine('test')
test is dead (stubbed)

Но я хочу использовать в тесте, и я хочу иметь assert_called_with метод, определенный на нем:

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') оно работает. Но мы не хотим этого, не так ли?

1 ответ

Решение

lambda может быть полезно в этой ситуации, попробуйте:

GoogleCloudLayer.createMachine = MagicMock(side_effect = lambda *args, **kwargs: GoogleCloudLayer.createMachine)
Другие вопросы по тегам