Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write time dependent tests Python

Suppose I have a function:

def third_day_from_now():
    return datetime.date.today() + datetime.timedelta(days=3)

I want to write tests for this function ? I know that If today is 25th then the function should return 28. Is there a way somehow I can force the datetime object to return current date as 25 ?

like image 704
Ninja420 Avatar asked Oct 30 '25 10:10

Ninja420


2 Answers

freezegun makes mocking datetime very easy.

from freezegun import freeze_time

@freeze_time("2015-02-25")
def test_third_day_from_now():
    assert third_day_from_now() == datetime.datetime(2015, 2, 28)
like image 177
Imran Avatar answered Nov 01 '25 22:11

Imran


Update function to get input date as argument(default value in None)

Then test function by calling with argument i.e. Custom Date and without argument.

Demo

>>> def third_day_from_now(input_date=None):
...      if input_date:
...           return input_date + datetime.timedelta(days=3)
...      else:
...           return datetime.date.today() + datetime.timedelta(days=3)
... 

>>> print "Today + 3:", third_day_from_now()
Today + 3: 2015-07-12

>>> input_date = datetime.datetime.strptime('25-05-2015', "%d-%m-%Y").date()
>>> print "Custom Date:", input_date
Custom Date: 2015-05-25
>>> print "Custom Date + 3:", third_day_from_now(input_date)
Custom Date + 3: 2015-05-28
like image 36
Vivek Sable Avatar answered Nov 01 '25 23:11

Vivek Sable