gpt4 book ai didi

python - 如何在 App Engine NDB 中测试 DateTimeProperty?

转载 作者:太空狗 更新时间:2023-10-29 21:35:07 25 4
gpt4 key购买 nike

我正在尝试使用 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() 时的时间。

最佳答案

所以您可以尝试的一件事(正如@mjibson 所暗示的那样)是在测试期间覆盖您的模型。由于 MyModel 本身是一个对象,您可以将 timestamp_auto_now 属性修改为 False 以进行测试。例如:

def testMyModelFilter(self):
# Change the auto_now parameter to False
MyModel.timestamp._auto_now = False

# Test as usual...
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)

我记得在其他地方看到过这种技术,所以如果我能找到它,我会链接(如果它有效,当然 :))。

关于python - 如何在 App Engine NDB 中测试 DateTimeProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com