我想用模拟库来代替datetime.now()
的结果来测试一些逻辑。所以我现在使用mocker
,它工作得很好,但是我遇到了一些问题,可能是bug,所以我想继续更新一些内容。谷歌建议使用fudge
所以。。。我不能让它嘲笑datetime.now()
from one import ClassName
def test_fudge():
import fudge
@fudge.patch('datetime.datetime.now')
def a(dtn):
dtn.expects_call().returns(1)
print 'fudge:', 'yep' if ClassName().one() == 1 else 'nope'
a()
test_fudge()
在一个.py文件:
^{pr2}${cd5>结果:^
有什么想法吗?在
模拟示例:
import mocker
from one import ClassName
m = mocker.Mocker()
n = m.replace('datetime.datetime')
n.now()
m.result(123)
with m:
print ClassName().one()
一个.py是一样的。 结果:123
这是由于您在中导入
datetime
模块的方式造成的一个.py。相反,请尝试以下方法:这是一个由于Python导入的工作方式而产生的问题。如果使用不同的模拟库,例如
mock
,您也会遇到相同的问题。在我会尽力解释,但在StackOverflow里有更好的答案,我找不到我想要的那个。在
当使用
from datetime import datetime
时,datetime
包被导入,datetime.datetime
类引用被绑定在的本地范围内一个.py。在但是fudge被赋予重写的名称是
datetime.datetime.now()
,它与上的本地绑定不同一个.py,因此不会发生修补。在换句话说,当
test_fudge()
运行并且它正在寻找修补名称datetime.datetime.now
,它如何知道中的datetime
名称一个.py在运行时引用与datetime.datetime
相同的对象?在相关问题 更多 >
编程相关推荐