Ho un metodo in python (2.7) che fa pippo, e si arresta dopo 5 minuti se foo non ha funzionato.override funzione python locale-variabile in 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')
So che alcuni possibili risultati di foo(), quindi sto usando finta di falsi quei valori di ritorno. Il problema è che non voglio che il test venga eseguito 5 minuti prima che venga visualizzata l'eccezione.
C'è un modo per ignorare quel valore locale di timeout? Mi piacerebbe che fossero solo pochi secondi in modo che io possa vedere il ciclo provare un paio di volte, poi rinunciare e rilanciare.
Quanto segue non funziona:
@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 lo è! – anregen
In realtà, ho usato '@ patch.object (myClass.time, 'time')' per mantenere il mock.side_effect locale su quel modulo. – anregen