How best to test functions which use date.today
Scott David Daniels
Scott.Daniels at Acm.Org
Sat Feb 28 16:01:32 EST 2009
Lie Ryan wrote:
> Yuan HOng wrote:
>> 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
Try something like this:
import module_to_test as sut # "sut" -> system under test
from datetime import date
class FakeDate(object):
def __init__(self, value):
self._result = value
def today(self):
return self._result
def test_today_is_2009_too_old():
temp, sut.date = sut.date, FakeDate(date(2008, 12, 31))
try:
assert not sut.today_is_2009()
finally:
sut.date = temp
def test_today_is_2009_too_young():
temp, sut.date = sut.date, FakeDate(date(2010, 1, 1))
try:
assert not sut.today_is_2009()
finally:
sut.date = temp
def test_today_is_2009_just_right():
temp, sut.date = sut.date, FakeDate(date(2009, 1, 1))
try:
assert not sut.today_is_2009()
finally:
sut.date = temp
Note: each test should test 1 thing.
--Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list