如何使用monkeypatch内置函数现在?

2024-10-01 09:32:37 发布

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

我想确保datetime.datetime.now()返回一个用于测试的特定日期时间,我该怎么做?我试过用pytest的monkeypatch

monkeypatch.setattr(datetime.datetime,"now", nowfunc)

但这给了我一个错误TypeError: can't set attributes of built-in/extension type 'datetime.datetime'


Tags: ofindatetimepytest错误时间cannow
2条回答

正如错误所告诉您的那样,您不能monkeypatch用C实现的许多扩展类型的属性(其他Python实现可能有不同于CPython的规则,但它们通常具有类似的限制)

解决这个问题的方法是创建一个子类,然后monkeypatch。在

例如(未经测试,因为我手头没有pytest但它可以与手动monkeypatching一起工作):

class patched_datetime(datetime.datetime): pass
monkeypatch.setattr(patched_datetime, "now", nowfunc)
datetime.datetime = patched_datetime

你不能,就像错误显示的那样。如果您需要这样做,您需要更改正在测试的代码,以便它有一个调用datetime.datetime.now()的实用函数,并将所有引用改为指向该函数。然后,可以使用monkeypatch函数返回您选择的时间。在

相关问题 更多 >