У меня есть метод в python (2.7), который делает foo, и отказывается через 5 минут, если foo не работает.переопределить функцию-локальную переменную python в unittest
def keep_trying(self):
timeout = 300 #empirically derived, appropriate timeout
end_time = time.time() + timeout
while (time.time() < end_time):
result = self.foo()
if (result == 'success'):
break
time.sleep(2)
else:
raise MyException('useful msg here')
Я знаю некоторые возможные результаты от foo(), поэтому я использую mock для подделки этих возвращаемых значений. Проблема в том, что я не хочу, чтобы тест работал за 5 минут до того, как он увидит исключение.
Есть ли способ переопределить это локальное значение таймаута? Я бы хотел, чтобы это было всего лишь несколько секунд, чтобы я мог увидеть цикл, попробовав пару раз, а затем сдаться и поднять.
Следующая не работает:
@patch.object(myClass.keep_trying, 'timeout')
@patch.object(myClass, 'foo')
def test_keep_trying(self, mock_foo, mock_timeout):
mock_foo.return_value = 'failed'
mock_timeout.return_value = 10 # raises AttributeError
mock_timeout = 10 # raises AttributeError
...
mock_time это! – anregen
На самом деле я использовал '@ patch.object (myClass.time, 'time')', чтобы локальный mock.side_effect был локальным для этого модуля. – anregen