Python'da (2.7) foo yapan ve foo çalışmazsa 5 dakika sonra pes edecek bir yöntemim var.python işlev yerel değişkenini geçersiz kılmayı geçersiz kılma
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() 'dan bazı olası sonuçları biliyorum, bu yüzden bu dönüş değerlerini sahte yapmak için sahte kullanıyorum. Sorun şu ki, testin istisnayı görmeden önce 5 dakika çalışmasını istemiyorum.
Bu yerel zaman aşımı değerini geçersiz kılmanın bir yolu var mı? Sadece birkaç saniye olmasını istiyorum, böylece döngüyü birkaç kez denedim, sonra pes et ve yükselt.
şu çalışmaz:
@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 öyle! – anregen
Aslında, bu modüle ait mock.side_effect öğesini yerel olarak tutmak için '@ patch.object (myClass.time, 'time')' işlevini kullandım. – anregen