Как имитировать переменную внутри метода

#python #methods #mocking

#python #методы #издевательство

Вопрос:

Я хочу имитировать переменную внутри метода

 class a(object):
    def __init__(self,ip,port,username,password):
        self.__ip=ip
        self.__port=port
        self.__username=username
        self.__password=password
        self.__connected=False

    def connect():
        if self.__connected:
           return RET_SUCCESS
  

Я хочу получить инструкцию return, купив издевательскую переменную внутри connect() метода.
В этом случае, если я сделаю self__connected = True , то только он достигнет оператора return. Как издеваться над переменными внутри метода?

Ответ №1:

Вы могли бы установить переменную экземпляра напрямую. Поскольку вы используете двойные подчеркивания, свойство будет доступно как:

 instance._a__connected = False
  

Вы также можете имитировать метод, чтобы возвращать это значение напрямую:

 with patch.object(a, 'connect', return_value=RET_SUCCESS) as mock_method:
    instance = a()
    instance.connect()