谁能告诉我为什么这不起作用?
>>> import mock
>>> @mock.patch('datetime.date.today')
... def today(cls):
... return date(2010, 1, 1)
...
>>> from datetime import date
>>> date.today()
datetime.date(2010, 12, 19)
Run Code Online (Sandbox Code Playgroud)
也许有人可以建议一个更好的方法?
同时采用了接受的答案的代码,我是有问题在这里.
代码的工作原理取决于我如何导入datetime.这是为什么?是否可以嘲笑它以便它可以双向工作?
我在用Python 3.4.以下代码说明了该问题:
import pytest
from datetime import datetime
mockdate = datetime(2000, 1, 1, 0, 0, 0)
@pytest.fixture(autouse=True)
def patch_datetime_now(monkeypatch):
class mydatetime:
@classmethod
def now(cls):
return mockdate
monkeypatch.setattr('datetime.datetime', mydatetime)
def test_doesnt_work():
assert datetime.now() == mockdate
def test_works():
import datetime
assert datetime.datetime.now() == mockdate
Run Code Online (Sandbox Code Playgroud) 我想确保datetime.datetime.now()返回一个特定的日期时间用于测试目的,我该怎么做?我试过pytest的monkeypatch
monkeypatch.setattr(datetime.datetime,"now", nowfunc)
Run Code Online (Sandbox Code Playgroud)
但这给了我错误 TypeError: can't set attributes of built-in/extension type 'datetime.datetime'