首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Doctest with datetime

Doctest with datetime
EN

Stack Overflow用户
提问于 2013-05-28 16:40:52
回答 1查看 493关注 0票数 2

我找了一遍,但找不到我要找的东西。

我的代码如下:

代码语言:javascript
复制
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()
subtract = datetime.timedelta(days=10, hours=11)
difference = now - subtract

def checktime(now - b):
    """Returns a - b

    >>> checktime(now - 10)
    'now - 10'

    >>> checktime(now - 20)
    'now - 20'

    >>> checktime(now - 30)
    'now - 30'
    """
    return now - b

if__name__== "__main__":
    doctest.testmod()


print
print 'The time now is =', now.strftime("%I:%M:%S%p %a, %B %d %Y")
print 'The time minus the difference =', difference.strftime("%I:%M:%S%p %a, %B %d %Y")
print

在继续之前,我希望doctest测试现在的时间减去数字(10,20,30小时)是否提供了正确的输出。

当我在命令提示符中运行该脚本时,我得到以下消息:

代码语言:javascript
复制
2 items had no tests:
    time
    time.struct_time
0 tests in 2 items.
0 passed and 0 failed.
Test passed.

我曾试图改变一些零星的东西,以找出什么是用时间和time.struct_time定义的,但都以惨败告终。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-28 17:18:30

如果您想要测试函数是否执行了预期的操作,Doctest是很有用的。在您的例子中,我假设您想要从datetime参数中减去b小时数并返回差值。

将您的函数重写为subtime

代码语言:javascript
复制
def subtime(a,b):
    subtract = datetime.timedelta(hours=b)
    difference = a - subtract
    return difference

要运行doctest,您需要提供一些样例调用值和预期结果。想一想你的函数的用例(可能会发生一些奇怪的事情)。现在让我们形成一些测试用例

  1. 减小于24小时
  2. 恰好减去24小时
  3. 减去超过24小时0小时
  4. 加一些小时(-ve参数)

现在写下函数在每种情况下的调用方式。为简单起见,请使用与第一个参数相同的datetime。(不要使用now等脚本变量,因为您无法在脚本运行时预测它们的值)

  1. subtime(datetime.datetime(2013,11,11,11,0),10)
  2. subtime(datetime.datetime(2013,11,11,11,0),24)
  3. subtime(datetime.datetime(2013,11,11,11,0),30)
  4. subtime(datetime.datetime(2013,11,11,11,0),0)
  5. subtime(datetime.datetime(2013,11,11,11,0),-5)

现在计算(用笔和纸)每种情况的理想结果是什么

  1. datetime.datetime(2013, 11, 11, 1, 0)
  2. datetime.datetime(2013, 11, 10, 11, 0)
  3. datetime.datetime(2013, 11, 10, 5, 0)
  4. datetime.datetime(2013, 11, 11, 11, 0)
  5. datetime.datetime(2013, 11, 11, 16, 0)

将此代码添加到文档字符串""" """中的函数中

代码语言:javascript
复制
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

您的脚本现在是

代码语言:javascript
复制
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

和输出

代码语言:javascript
复制
$ 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

请注意,使用doctest时,如果所有测试都通过,则不会得到任何与测试相关的输出。(一切正常)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16787561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档