python - 如何模拟 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'
。
我该如何模拟他们以快速完成超时情况?
解决方案
你需要嘲笑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()
推荐阅读
- linux - 图像在 opencv 捕获中呈绿色
- excel - 作为参数传递的函数以获取其值
- python - Python Behave - 如何从场景中传递值以在功能级别的夹具中使用?
- python - 尝试用python做一个基本的网上商店代码
- c++ - 父进程和子进程之间的 POSIX 信号量
- javascript - 单击其他按钮时如何删除标签的类
- kubernetes - 使用来自 kubernetes java 客户端的名称启动部署或服务
- javascript - Openlayers V6 背景填充文本仅适用于最后一个文本元素
- c# - pdfDocument.Save 是否保留 PDF 文件格式?
- javascript - 没有反弹css时,Javascript的scrollTo()不起作用?