En Sat, 28 Feb 2009 15:35:47 -0200, Yuan HOng <hongyuan1...@gmail.com> escribió:

In my project I have several date related methods which I want tested for
correctness. The functions use date.today() in several places. Since this
could change every time I run the test, I hope to find someway to fake a
date.today.

For illustration lets say I have a function:


from datetime import date
def today_is_2009():
    return date.today().year == 2009

To test this I would like to write test function like:

def test_today_is_2009():
    set_today(date(2008, 12, 31))
    assert today_is_2009() == False
    set_today(date(2009,1,1))
    assert today_is_2009() == True


Instead of trying to inject a fake date, you could rewrite the function to
take a date argument:

def today_is_2009(today=None):
   if today is None:
     today = date.today()
   return today.year == 2009

Then, tests should pass a known date. This approach has a drawback -- you
don't test the case when no argument is given.

Another way is to use a fake date class, or a fake datetime module. Google "python mock object"

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to