如何对验证datetime是否为特定ISO格式的函数进行单元测试?

2024-06-17 12:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我是单元测试的新手,我想要一些关于这个主题的指导。该函数首先验证datetime是否为字符串,如果是,然后验证它是否为正确的ISO格式。你知道吗

if not isinstance(timestamp,str):
    raise ValueError("timestamp must be a string")
try:
    datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S')
    return True
except ValueError:
    return True

如何确定单元测试中要包含哪些内容以及应该注意哪些内容?你知道吗


Tags: 函数字符串true内容主题datetimereturnif
1条回答
网友
1楼 · 发布于 2024-06-17 12:15:51

关键是提出边缘案件。这在很大程度上依赖于问题域的经验,您在过去看到过哪些处理datetimes的bug。但幸运的是,当您在等待Lyft或其他什么的时候发现并修复bug或者想到一些奇怪的情况时,您总是可以添加更多的单元测试。你知道吗

datetimes有一些特别的东西需要注意,但是请注意,其中很多东西,你首先要决定你想做什么,然后才能测试你是否在做你决定要做的事情。你知道吗

  • 当然,确保非字符串会引发ValueError。包括bytes。你知道吗
  • 一位数的日和月2018-3-06是有效日期吗?你知道吗
  • 对于小时、分钟和秒也是如此(但有时你想要的规则是不同的)。你知道吗
  • 不同的分隔符—例如2018-03-06 12:13:14是有效的ISO时间戳,但根据您的规则无效。就这点而言,20180306T12:13:14和许多其他变体也是如此。你知道吗
  • 所有明显的过去结束值,如第0个月或13个月,但见下面的奇数例外,如第二个60。你知道吗
  • 过去的时间戳太远,代码的其他部分无法处理。例如,ISO允许日期在1960年,但是如果您的代码要将它们传递给处理uint32 Unix时间戳的API,就您而言,它们是无效的。你知道吗
  • 0000年。根据ISO8601,这意味着公元前1年,但你可能不想。你知道吗
  • 两位数的年份。一位数、三位数和五位数的年份。和负年份,以及带有显式+前缀的年份。ISO 8601建议使用0030这样的四位数年份,但也建议允许使用+-前缀(这是处理公元前1年之前年份的唯一方法),并且通常在信息交换合作伙伴的同意下允许使用10010“这样的年份。你知道吗
  • 分数秒。有人会从你身边经过。你知道吗
  • 时区/偏移指示器。有人会从你身边经过。你知道吗
  • 2月29日闰年(包括2000年)和非闰年(包括1900年)。你知道吗
  • 闰秒-例如,UTC或日本本地的2006-01-01T08:59:60。你知道吗
  • 因为DST转换而不存在的时间,如果你处理当地时间的话,例如2018-03-11T02:30:00在美国大部分地区都不存在
  • 如果你在和当地时间打交道,关心过去的事情,比如1752年英国失踪的11天,1918年俄罗斯失踪的13天,等等,因为日历的改变而不存在的日子

相关问题 更多 >