Как видно из названия. Я хочу издеваться над импортированной функцией из модуля. В этом случае модуль datetime
, и я хочу издеваться datetime.datetime.now
. Я включил то, что я сделал без успеха.
# main.py:
import datetime
# cannot modify
def call_me(func):
return func()
class A:
variable = call_me(datetime.datetime.now)
# conftest.py:
import pytest
import datetime
FAKE_TIME = datetime.datetime.fromisoformat("2020-03-19T03:30:00")
@pytest.fixture(autouse=True)
def patch_datetime_now(monkeypatch):
class mydatetime(datetime.datetime):
@classmethod
def now(cls):
return FAKE_TIME
monkeypatch.setattr('datetime.datetime', mydatetime)
# test_main.py:
import datetime
from main import A
def test_main():
assert A.variable == datetime.datetime.now()
❯ pytest
------------------------------------------------------------------------------------
def test_main():
> assert A.variable == datetime.datetime.now()
E AssertionError: assert datetime.datetime(2020, 3, 19, 21, 32, 39, 861956) == datetime.datetime(2020, 3, 19, 3, 30)
Я искал обходной путь для этого и нашел только этот вопрос Как monkeypatch pytime datetime.datetime.now с py.test?, Включенный код является лишь минимальным примером того, что мне нужно. По сути, у меня есть приложение, которое использует sqlalchemy.orm
для сохранения данных, а конкретная модель c имеет значение по умолчанию для даты, равное datetime.datetime.now
, и мне нужно изменить дату значения по умолчанию, чтобы иметь возможность ее проверить. Модели определены в другом файле.
Спасибо за помощь.