Несвязанный метод 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)