您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:20:49 python 字数 4424 阅读 491 来源 www.jb51.cc/python

我正在尝试使用不同的工具进行模拟,并找出最好的工具.我非常喜欢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()

  
   Now()
datetime.datetime(2012,12,0)

  

当我在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_mock
if (_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 "
  
   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进行模拟所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶