Mam metodę w python (2.7), która robi foo, i poddaje się po 5 minutach, jeśli foo nie działa.przesłonić zmienną lokalną pytona w 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')
Znam niektóre możliwe wyniki z foo(), więc używam makiety do sfałszowania tych wartości zwracanych. Problem polega na tym, że nie chcę, aby test był uruchamiany 5 minut przed wyświetleniem wyjątku.
Czy istnieje sposób na zastąpienie tej lokalnej wartości limitu czasu? Chciałbym, żeby to było tylko kilka sekund, abym mógł zobaczyć pętlę kilka razy, a następnie poddać się i podnieść.
Następujące nie działa:
@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 to jest! – anregen
Właściwie użyłem '@ patch.object (myClass.time, 'time')', aby zachować mock.side_effect lokalnie do tego jednego modułu. – anregen