[英]Fudge mocking datetime.now
我想使用mock库来替换datetime.now()
结果来测试一些逻辑。 所以我现在正在使用mocker
,它运行良好,但我遇到了一些问题,也许是错误,所以我想继续更新更新的东西。 谷歌建议使用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()
one.py文件:
from datetime import datetime, timedelta
class ClassName(object):
def one(self):
return datetime.now()
结果: fudge: nope
有任何想法吗?
Mocker的例子 :
import mocker
from one import ClassName
m = mocker.Mocker()
n = m.replace('datetime.datetime')
n.now()
m.result(123)
with m:
print ClassName().one()
one.py是一样的。 结果:123
这是由于您在one.py中导入datetime
模块的方式 。 相反,试试这个:
import datetime
class ClassName(object):
def one(self):
return datetime.datetime.now()
这是由于Python导入工作方式而产生的问题。 如果你使用了不同的mock
库,比如mock
你会遇到同样的问题。
我会尝试解释,但StackOverflow中有更好的答案,我找不到我追求的那个。
当from datetime import datetime
时,所述datetime
包被导入和datetime.datetime
类引用在one.py的本地范围的约束。
但是,fudge要覆盖的名称是datetime.datetime.now()
,它与one.py上的本地绑定的名称不同,因此不会发生修补。
换句话说,当test_fudge()
运行并且它正在寻找修补名称datetime.datetime.now
,它如何知道one.py中的datetime
名称在运行时引用与datetime.datetime
相同的对象?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.