У меня возникли проблемы при использовании кода принятого ответа here.Почему monkeypatch python не работает при импорте класса вместо модуля?
Код работает в зависимости от того, как я импортирую дату и время. Почему? Можно ли издеваться над этим, чтобы он работал в обоих направлениях?
Я использую 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
Спасибо, это полезно. Итак, вы знаете какой-либо способ заставить его работать с «из datetime import datetime» вместо «import datetime»? – rgargente
Уверенный, вы должны исправить 'yourmodule.datetime' вместо этого. Взгляните на фрейм фреймворка: вы можете отлично использовать «patch». –
Я создал новый ответ с решением, но я все же думаю, что это справедливо. Я отмечаю ваш ответ как принятый. Ура! – rgargente