2015-10-15 13 views
9

Mam kod, który zależy od upływu czasu (na przykład: Jeśli 10 minut minęło)czas advance sztucznie w pytest

Jaki jest najlepszy sposób, aby symulować to w pytest? Metody łatania małp w czasie modułu?

Przykład Code (kod badany - nieco schematyczną lecz przekazuje komunikat)

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

można pokazać fragment kodu? Jestem ciekawa, z czego korzystasz. Chcę tylko upewnić się, że dobrze rozumiem, o co prosisz. – idjaw

+0

edytowane oryginalne pytanie – Boaz

Odpowiedz

7

FreezeGun prawdopodobnie najprostszym rozwiązaniem.

Przykładowy kod z jej readme:

from freezegun import freeze_time 

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

Właśnie napisałem coś za pomocą mock.patch. Nieważne! To jest świetne! – idjaw

+0

, ale co, jeśli datetime znajduje się w kodzie produkcyjnym (a nie w kodzie testowym)? – Boaz

+0

@Boaz - Dopóki aktywny jest FreezeGun, będzie to miało wpływ zarówno na kod produkcyjny, jak i kod testowy. Czy nie rozumiem twojego pytania? –

Powiązane problemy