python– 使用Flexmock datetime.datetime.now进行模拟

python– 使用Flexmock datetime.datetime.now进行模拟,第1张

概述我正在尝试使用不同的工具进行模拟,并找出最好的工具.我非常喜欢flexmock的简单性,但我无法弄清楚如何模拟datetime.datetime.now()的行为.如何在flexmock中模拟以下行为?>>> from datetime import datetime >>> mocker = Mocker() >&

我正在尝试使用不同的工具进行模拟,并找出最好的工具.我非常喜欢flexmock的简单性,但我无法弄清楚如何模拟datetime.datetime.Now()的行为.

如何在flexmock中模拟以下行为?

>>> from datetime import datetime>>> mocker = Mocker()>>> fake_datetime=mocker.replace(datetime)>>> fake_datetime.Now()

当我在flexmock中尝试相同时:

>>> from datetime import datetime  >>> fake_datetime = flexmock(datetime)Traceback (most recent call last):  file "C:\virtualenvs\webui\lib\site-packages\flexmock.py",line 1194,in flexmock    return _create_partial_mock(spec,**kwargs)  file "C:\virtualenvs\webui\lib\site-packages\flexmock.py",line 1013,in _create_partial_mockif (_attach_flexmock_methods(mock,Mock,obj_or_class) and  file "C:\virtualenvs\webui\lib\site-packages\flexmock.py",line 1030,in_attach_flexmock_methods'Python does not allow you to mock builtin objects or modules. '    'Python does not allow you to mock builtin objects or modules. 'MockBuiltinError: Python does not allow you to mock builtin objects or modules.ConsIDer wrapPing it in a class you can mock instead

要么

>>>flexmock(datetime).should_receive('datetime.Now').and_return(datetime.datetime(2012,10))>>> datetime.datetime.Now()Traceback (most recent call last):  file "
最佳答案你的第一种方法有正确的想法,但遗憾的是Python不允许你修改内置对象,如datetime.datetime. flexmock monkey-patches在运行时调用object和hijacks方法,在这种情况下是不可能的.异常中的错误实际上提到了一个解决方案 – 你可以在你自己的类中包装datetime.datetime然后模拟它.但是如果你真的想要做Mocker在你的例子中所做的事情,只是用一个返回你想要的Now()方法创建一个假对象,你可以很容易地做到这一点:

fake_datetime = flexmock(Now=lambda: datetime(year=2012,day=12))

但是,当然,除非您将伪造的日期时间对象注入调用代码,否则常规调用datetime.Now()不会被flexmock劫持.

您的第二种方法产生错误,因为flexmock中的datetime.should_receive(‘datetime.Now’)适用于链式方法调用.这意味着它期望像datetime.datetime().Now()而不是datetime.datetime.Now()这样的调用,所以它最终会抱怨datetime,它可能是一个没有方法Now()的函数.

总结

以上是内存溢出为你收集整理的python – 使用Flexmock datetime.datetime.now进行模拟全部内容,希望文章能够帮你解决python – 使用Flexmock datetime.datetime.now进行模拟所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205424.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)