Monkeypatch импортировал модуль из другого файла с pytest - PullRequest
1 голос
/ 20 марта 2020

Как видно из названия. Я хочу издеваться над импортированной функцией из модуля. В этом случае модуль 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, и мне нужно изменить дату значения по умолчанию, чтобы иметь возможность ее проверить. Модели определены в другом файле.

Спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...