Python 如何修补datetime.datetime.now()?

Python 如何修补datetime.datetime.now()?,python,monkeypatching,Python,Monkeypatching,test.py my_module.py @patch('I want to patch datetime.datetime.now here') def test_function(): import my_module my_module.some_function() ... 顺便说一句,我正在使用pytest。您需要修补要替换的特定导入,并为mock提供一个参数;尝试以下方法: from datetime import datetime def some_fu

test.py

my_module.py

@patch('I want to patch datetime.datetime.now here')
def test_function():
    import my_module
    my_module.some_function()
    ...

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

您需要修补要替换的特定导入,并为mock提供一个参数;尝试以下方法:

from datetime import datetime

def some_function():
    now = datetime.now()
要现在仅修补
,请使用:

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()

我想可能就是你要找的模块。

在哪里打补丁?!您试图修补的导入是什么?它是如何编写的?这里有一个问题。我不想修补整个datetime类,只想
datetime.now()
,因为我需要其他方法。它说:
AttributeError:type object'datetime.datetime'没有属性'rsplit'
@laike9m哪一行,修补程序?也许我错过了一些quotes@laike9m那有用吗?我不在家,所以无法测试,抱歉。好吧,我发现了一个类似的问题:,尽管它似乎不适用于我,因为我无法替换其他模块中的东西。不管怎样,
mock
无法修补这个补丁,根据那个问题和我的实验。我知道并且以前用过冰枪,这不是我需要的。
@patch.object('my_module.datetime', 'now')
def test_function(now):
    now.return_value = ...
    my_module.some_function()
    ...
    now.assert_called_once_with()