Doctest is useful if you want to test that the function is doing what was intended. In your case, I presume you want to subtract b
hours from the datetime
argument and return the difference.
Re-writing your function to subtime
def subtime(a,b):
subtract = datetime.timedelta(hours=b)
difference = a - subtract
return difference
To run doctests, you'll need to provide some sample calling values and the expected results. Think about the corner cases for your function (Places where something wierd might happen). Now let us form some test-cases
- Subtract less than 24 hours
- Subtract exactly 24 hours
- Subtract more than 24 hours
- Subtract 0 hours
- Add some hours (-ve arguments)
Now write down how the function will be called in each case. Use the same datetime
as first argument for simplicity. (Do not use script variables such as now
because you cannot predict their values when the script runs)
subtime(datetime.datetime(2013,11,11,11,0),10)
subtime(datetime.datetime(2013,11,11,11,0),24)
subtime(datetime.datetime(2013,11,11,11,0),30)
subtime(datetime.datetime(2013,11,11,11,0),0)
subtime(datetime.datetime(2013,11,11,11,0),-5)
Now calculate (using a pen and paper) what should be the ideal result for each case
datetime.datetime(2013, 11, 11, 1, 0)
datetime.datetime(2013, 11, 10, 11, 0)
datetime.datetime(2013, 11, 10, 5, 0)
datetime.datetime(2013, 11, 11, 11, 0)
datetime.datetime(2013, 11, 11, 16, 0)
Add this to your function in the documentation string """ """
def subtime(a,b):
""" (datetime,int) -> datetime
Subtract b hours from a datetime.datetime and return the new datetime object
>>> subtime(datetime.datetime(2013,11,11,11,0),10)
datetime.datetime(2013, 11, 11, 1, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),24)
datetime.datetime(2013, 11, 10, 11, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),30)
datetime.datetime(2013, 11, 10, 5, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),0)
datetime.datetime(2013, 11, 11, 11, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),-5)
datetime.datetime(2013, 11, 11, 16, 0)
"""
subtract = datetime.timedelta(hours=b)
difference = now - subtract
return difference
Your script now is
import datetime
import doctest
import os
def parseOptions():
import optparse
parser = optparse.OptionParser(usage= '-h')
parser.add_option('-d', '--difference', \
type= 'int')
(options, args) = parser.parse_args()
return options
now = datetime.datetime.now()
def subtime(a,b):
""" (datetime,int) -> datetime
Subtract b hours from a datetime.datetime and return the new datetime object
>>> subtime(datetime.datetime(2013,11,11,11,0),10)
datetime.datetime(2013, 11, 11, 1, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),24)
datetime.datetime(2013, 11, 10, 11, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),30)
datetime.datetime(2013, 11, 10, 5, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),0)
datetime.datetime(2013, 11, 11, 11, 0)
>>> subtime(datetime.datetime(2013,11,11,11,0),-5)
datetime.datetime(2013, 11, 11, 16, 0)
"""
subtract = datetime.timedelta(hours=b)
difference = a - subtract
return difference
if __name__== "__main__":
doctest.testmod()
print
print 'This is the time now -', now.strftime("%I:%M:%S %p %a, %B %d %Y")
difference=subtime(now,10)
print 'This is the time minus the difference -', difference.strftime("%I:%M:%S %p %a, %B %d %Y")
print
And the output
$ python try.py
This is the time now - 02:40:57 PM Tue, May 28 2013
This is the time minus the difference - 04:40:57 AM Tue, May 28 2013
Note that with doctest you won't get any test related output if all the tests pass. (Everything is OK)