gpt4 book ai didi

python - 带日期时间的 Doctest

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:54 25 4
gpt4 key购买 nike

我已经进行了搜索,但找不到我想要的东西。

我的代码如下:

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 小时)是否给出正确的输出。

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

2 items had no tests:
time
time.struct_time
0 tests in 2 items.
0 passed and 0 failed.
Test passed.

我试图更改点点滴滴以找到用 time 和 time.struct_time 定义的内容,但失败得很惨。

如有任何帮助,我们将不胜感激!

最佳答案

如果您想测试该函数是否正在执行预期,则 Doctest 很有用。在您的情况下,我假设您想从 datetime 参数中减去 b 小时并返回差值。

将您的函数重写为 subtime

def subtime(a,b):
subtract = datetime.timedelta(hours=b)
difference = a - subtract
return difference

要运行 doctests,您需要提供一些示例调用值和预期结果。考虑您的函数的极端情况(可能发生奇怪 事情的地方)。现在让我们形成一些测试用例

  1. 减去少于 24 小时
  2. 恰好减去 24 小时
  3. 减去超过 24 小时
  4. 减去 0 小时
  5. 添加一些时间(-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)

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

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

你的脚本现在是

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

和输出

$ 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,如果所有测试都通过,您将不会得到任何测试相关的输出。 (一切正常)

关于python - 带日期时间的 Doctest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16787561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com