关于python:如何修补datetime.datetime.now()?

How to monkey patch datetime.datetime.now()?

本问题已经有最佳答案,请猛点这里访问。

test.py

1
2
3
4
5
@patch('I want to patch datetime.datetime.now here')
def test_function():
    import my_module
    my_module.some_function()
    ...

my_module.py

1
2
3
4
from datetime import datetime

def some_function():
    now = datetime.now()

顺便说一下,我正在使用pytest。


我认为freezegun可能是你正在寻找的模块。


您需要修补要替换的特定导入,并为模拟提供参数; 尝试类似的东西:

1
2
3
4
5
6
7
8
9
10
from unittest.mock import patch

import my_module

@patch('my_module.datetime')
def test_function(datetime):
    datetime.now.return_value = ...
    my_module.some_function()
    ...
    datetime.now.assert_called_once_with()

要仅修补now,请使用:

1
2
3
4
5
6
@patch.object('my_module.datetime', 'now')
def test_function(now):
    now.return_value = ...
    my_module.some_function()
    ...
    now.assert_called_once_with()