【发布时间】:2013-06-12 15:56:45
【问题描述】:
在测试时,我真的很想确保 datetime.datetime.now() 返回某个 datetime 实例。这就是我在测试中实现这一点的方式,使用 pytest 的 monkeypatchfunction:
def test_auth_token_create(monkeypatch):
newnow = datetime.datetime.now()
later = newnow + datetime.timedelta(seconds=10)
class fake_dt(datetime.datetime):
def __init__(self, year, month, day):
super(fake_dt, self).__init__(year, month, day)
@classmethod
def now(cls):
return newnow
monkeypatch.setattr(datetime,"datetime", fake_dt)
user = users.User.new("bob","password")
token = users.AuthToken.new(user=user, expires=10)
assert token.expires == later
但是当我运行测试时,我收到以下错误:
BadValueError: Expected datetime, got datetime.datetime(2013, 6, 12, 15, 31, 6, 11693)
在名为“expires”的 DateTimeProperty 的验证方法中会引发此错误。
在AuthToken类内部,有一个名为new的类方法,它通过以下方式构造一个实例:
expires = datetime.datetime.now() + datetime.timedelta(seconds=expires)
instance = cls(token=token, user=user, expires=expires)
在这里,唯一重要的变量是expires,它最初是一个整数秒数,然后通过将 timedelta 添加到我的 monkeypatch 返回的 datetime.datetime.now 值来转换为日期时间。
【问题讨论】:
标签: python google-app-engine app-engine-ndb monkeypatching pytest