如何使用 py.test 对 python 的 datetime.datetime.now 进行 monkeypatch?

新手上路,请多包涵

我需要测试使用 datetime.datetime.now() 的功能。最简单的方法是什么?

原文由 sashk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 897
2 个回答

你需要 monkeypatch datetime.now 功能。在下面的示例中,我正在创建可以稍后在其他测试中重复使用的夹具:

 import datetime
import pytest

FAKE_TIME = datetime.datetime(2020, 12, 25, 17, 5, 55)

@pytest.fixture
def patch_datetime_now(monkeypatch):

    class mydatetime:
        @classmethod
        def now(cls):
            return FAKE_TIME

    monkeypatch.setattr(datetime, 'datetime', mydatetime)

def test_patch_datetime(patch_datetime_now):
    assert datetime.datetime.now() == FAKE_TIME

原文由 sashk 发布,翻译遵循 CC BY-SA 4.0 许可协议

freezegun 模块

 from datetime import datetime
from freezegun import freeze_time # $ pip install freezegun

@freeze_time("Jan 14th, 2012")
def test_nice_datetime():
    assert datetime.now() == datetime(2012, 1, 14)

freeze_time() 也可以用作上下文管理器。该模块支持指定本地时区 UTC 偏移量。

原文由 jfs 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题