gpt4 book ai didi

python - 模拟 datetime.datetime.now() 时出错

转载 作者:行者123 更新时间:2023-12-04 10:26:05 25 4
gpt4 key购买 nike

我是 Python 新手。我正在尝试模拟 datetime.datetime.now() 但它不起作用:

class Myclass:

def update(self):

time = datetime.datetime.now().strftime("%s")
...

以上函数位于mypackage/my_class.py

根据这篇文章 ( Trying to mock datetime.date.today(), but not working ) 的想法编写如下测试:

@patch('mypackage.my_class.Myclass.datetime')
def test_update(self, datetime_mock):
datetime_mock.datetime.now.return_value=datetime.datetime(2020,1,1,1,1,1,1)

出现如下错误:

E           AttributeError: <class 'mypackage.my_class.Myclass'> does not have the attribute 'datetime'

然后我改变了补丁如下:

@patch('datetime')
def test_update(self, datetime_mock):
datetime_mock.datetime.now.return_value=datetime.datetime(2020,1,1,1,1,1,1)

现在出现如下错误:

venv/lib/python3.6/site-packages/mock/mock.py:1591: in _get_target
target, attribute = target.rsplit('.', 1)
E ValueError: not enough values to unpack (expected 2, got 1)

E TypeError: Need a valid target to patch. You supplied: 'datetime'

最佳答案

您可以使用 freezegun 模块中的 freeze_time。我修改了 update() 以创建一个日期时间字符串,以提高此测试的可读性

class MyClass:
def update(self):
self.time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

from freezegun import freeze_time


class TestMyClass:
@freeze_time("2020-03-01 12:31")
def test_update(self):
my_class = MyClass()
my_class.update()
assert my_class.time == "2020-03-01 12:31"

希望这对您有所帮助!

关于python - 模拟 datetime.datetime.now() 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60632193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com