2015-10-15 7 views
9

Ho codice che dipende dal tempo trascorso (per esempio: se 10 minuti è passato)tempo anticipo artificialmente in pytest

Qual è il modo migliore per simulare questo in pytest? Metodi di patch delle scimmie nel tempo del modulo?

Esempio di codice (il codice testato - un po 'schematico, ma veicola il messaggio):

current_time = datetime.datetime.utcnow() 
retry_time = current_time + datetime.timedelta(minutes=10) 
#time_in_db represents time extracted from DB 
if time_in_db > retry_time: 
    #perform the retry 
+0

si può mostrare un frammento del codice? Sono curioso di sapere cosa stai usando. Voglio solo assicurarmi di avere una comprensione adeguata di ciò che stai chiedendo. – idjaw

+0

ha modificato la domanda originale – Boaz

risposta

7

FreezeGun è probabilmente la soluzione più semplice.

codice di esempio da suo readme:

from freezegun import freeze_time 

@freeze_time("2012-01-14") 
def test(): 
    assert datetime.datetime.now() == datetime.datetime(2012, 01, 14) 
+0

Stavo scrivendo qualcosa usando mock.patch. Non importa! È fantastico! – idjaw

+0

ma cosa succede se il datetime è nel codice di produzione (e non nel codice di test)? – Boaz

+0

@Boaz: finché FreezeGun è attivo, influirà sul codice di produzione e sul codice di test. O sto fraintendendo la tua domanda? –