我在使用接受的答案here的代碼時遇到了問題。爲什麼python的monkeypatch在導入類而不是模塊時不起作用?
代碼的工作取決於我如何導入日期時間。這是爲什麼?是否有可能嘲笑它,所以它可以兩種方式?我正在使用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'。看看模擬框架:你可以罰款'補丁'非常有用。 –
我已經爲解決方案創建了一個新答案,但我仍然認爲這是公平的,我將您的答案標記爲已接受。乾杯! – rgargente