2015-10-15 3 views
9

Ich habe Code, der auf dem verstrichene Zeit ab (zum Beispiel: Wenn 10 Minuten vergangen sind)Vorlaufzeit künstlich in pytest

Was ist der beste Weg, dies in pytest zu simulieren? Affe Patch-Methoden in Modulzeit?

Beispiel-Code (der getesteten Code - ein wenig schematisch aber vermittelt die Botschaft):

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

zeigen Ihnen einen Ausschnitt des Codes? Ich bin neugierig zu wissen, was Sie verwenden. Ich möchte nur sicherstellen, dass ich ein richtiges Verständnis davon habe, was du verlangst. – idjaw

+0

bearbeitet die ursprüngliche Frage – Boaz

Antwort

7

FreezeGun ist wahrscheinlich die einfachste Lösung.

Beispielcode aus seiner readme:

from freezegun import freeze_time 

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

Ich habe gerade etwas mit mock.patch geschrieben. Vergiss es! Das ist toll! – idjaw

+0

aber was, wenn die Datetime im Produktionscode ist (und nicht der Testcode)? – Boaz

+0

@Boaz - Solange FreezeGun aktiv ist, wirkt sich dies sowohl auf den Produktionscode als auch auf den Testcode aus. Oder verstehe ich deine Frage falsch? –

Verwandte Themen