Wystąpiły problemy podczas korzystania z kodu akceptowanej odpowiedzi here.Dlaczego monkeypatch Pythona nie działa podczas importowania klasy zamiast modułu?
Kod działa w zależności od tego, w jaki sposób importuję datetime. Dlaczego tak jest? Czy można to udawać, więc działa to w obie strony?
Używam Python 3.4
. Poniższy kod ilustruje problem:
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
Dzięki, to jest przydatne. Więc, czy znasz jakiś sposób, aby działał z "datetime importu datetime" zamiast "import datetime"? – rgargente
Zamiast tego powinieneś załączyć 'yourmodule.datetime'. Spójrz na fałszywe ramy: możesz dobrze "łatać" bardzo przydatne. –
Utworzyłem nową odpowiedź za pomocą rozwiązania, ale nadal uważam, że to sprawiedliwe, że zaznaczam twoją odpowiedź jako zaakceptowaną. Twoje zdrowie! – rgargente