【发布时间】:2012-10-23 06:55:10
【问题描述】:
我正在尝试使用 App Engine 的 NDB 测试 DateTimeProperty 的过滤器,但我已将其设置为 auto_now?
有没有办法绕过这个进行单元测试?
例子:
class MyModel(ndb.Model)
timestamp = ndb.DateTimeProperty(auto_now)
name = ndb.StringProperty()
def testMyModelFilter(self):
test1 = MyModel()
test1.timestamp = datetime.datetime.now() - datetime.timedelta(hours=2)
test1.put()
test2 = MyModel()
test2.timestamp = datetime.datetime.now() - datetime.timedelta(hours=1)
test2.put()
hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
fetched = MyModel.query().filter(MyModel.timestamp < hour_ago).fetch(
None, keys_only=True)
不幸的是,当我使用 test.put() 将其提交到数据存储区时,它使用的是 put() 的时间。
【问题讨论】:
-
一些想法:覆盖
_pre_put_hook()或将MyModel.timestamp设置为正常的ndb.DateTimeProperty(如果您正在进行测试)。 -
主要问题是因为它正在记录不同的时间戳,并且您正在寻找一种方法来过滤该确切时间以验证您的过滤器是否有效?也就是说,将
test.put()的结果赋值给test_key,然后通过key获取实体就可以了吗? -
@RocketDonkey 是的,我正在寻找验证我的过滤器。我已经扩展了我的示例以包含查找。
标签: python google-app-engine app-engine-ndb