首页 > 解决方案 > 如何模拟 datetime.datetime.now() 到 unittest 超时情况?

问题描述

现在我有一个datetime.datetime.now()用来计算时间差的函数。

import datetime

TIMEOUT = datetime.timedelta(minutes=5)

def test():
  start_time = datetime.datetime.now()
  while datetime.datetime.now() - start_time < TIMEOUT:
    if do_something_succeed():
      return True
  return False

如果我想对超时情况进行单元测试,我必须等待 5 分钟。

如果我嘲笑datetime.datetime.now(),我会得到TypeError: can't set attributes of built-in/extension type 'datetime.datetime'

我该如何模拟他们以快速完成超时情况?

标签: python

解决方案


你需要嘲笑datetime.datetime自己。

datetime = mock.Mock()
datetime.now = ...  # function or class that makes the magic happen

@mock.patch('mod.datetime', datetime)
def test_func():
  assert not test()

推荐阅读