rga*_*nte 15 python monkeypatching mocking pytest python-3.x
同时采用了接受的答案的代码,我是有问题在这里.
代码的工作原理取决于我如何导入datetime.这是为什么?是否可以嘲笑它以便它可以双向工作?
我在用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
Run Code Online (Sandbox Code Playgroud)
Mic*_*ico 20
即使你没有使用mock
框架,你也应该看一下修补章节的位置.通过写作
from datetime import datetime
Run Code Online (Sandbox Code Playgroud)
您正在datetime.datetime
测试模块中创建一个新引用并调用它datetime
.这是您在test_doesnt_work()
测试中使用的参考.
通过写作
monkeypatch.setattr('datetime.datetime', mydatetime)
Run Code Online (Sandbox Code Playgroud)
你正在修补模块中datetime
的绝对引用datetime
:用于的模块test_works()
.
rga*_*nte 11
@Michele d'Amico的答案解释了为什么它不起作用.如果您想使用"from datetime import datetime"而不仅仅是"import datetime",这是如何使它工作的
monkeypatch.setattr(__name__ + '.datetime', mydatetime)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4230 次 |
最近记录: |