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

时间:2016-01-10 14:51:53

标签: python monkeypatching

test.py

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

my_module.py

from datetime import datetime

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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,请使用:

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