测试 ndb 实体是否已放入数据存储
Test that ndb entity was put to data store
我遇到了一个错误,我没有正确检查实体是否已放入数据存储。它与事务、上下文缓存和内存缓存特别混淆。
考虑这个实体,其中每个方法的目的是递增 n
并将实体保存到数据存储:
class MyEntity(ndb.Model):
n = ndb.IntegerProperty()
def inc(self):
self.n += 1
# self.put() # oops, forgot to put the entity
@staticmethod
@ndb.transactional
def inc_trans(key):
x = key.get()
x.n += 1
# x.put() # oops, forgot to put the entity
和这些单元测试:
def testInc(self):
x = MyEntity(n=0)
x.put()
x.inc()
x = x.key.get()
self.assertEqual(x.n, 1)
def testIncTrans(self):
x = MyEntity(n=0)
x.put()
MyEntity.inc_trans(x.key)
x = x.key.get()
self.assertEqual(x.n, 1)
我应该向这些测试添加什么以确保实体已实际保存到数据存储中? (即,我们不检查存储在上下文缓存或内存缓存中的值?)添加
是否足够
ndb.get_context().clear_cache()
在调用 inc
和 inc_trans
?
之后进行单元测试
经过更多研究,我发现我们可以强制 get
不使用任何缓存,如下所示:
x = x.key.get(use_cache=False, use_memcache=False)
在测试中使用无缓存的 get 似乎是可行的方法。
我遇到了一个错误,我没有正确检查实体是否已放入数据存储。它与事务、上下文缓存和内存缓存特别混淆。
考虑这个实体,其中每个方法的目的是递增 n
并将实体保存到数据存储:
class MyEntity(ndb.Model):
n = ndb.IntegerProperty()
def inc(self):
self.n += 1
# self.put() # oops, forgot to put the entity
@staticmethod
@ndb.transactional
def inc_trans(key):
x = key.get()
x.n += 1
# x.put() # oops, forgot to put the entity
和这些单元测试:
def testInc(self):
x = MyEntity(n=0)
x.put()
x.inc()
x = x.key.get()
self.assertEqual(x.n, 1)
def testIncTrans(self):
x = MyEntity(n=0)
x.put()
MyEntity.inc_trans(x.key)
x = x.key.get()
self.assertEqual(x.n, 1)
我应该向这些测试添加什么以确保实体已实际保存到数据存储中? (即,我们不检查存储在上下文缓存或内存缓存中的值?)添加
是否足够ndb.get_context().clear_cache()
在调用 inc
和 inc_trans
?
经过更多研究,我发现我们可以强制 get
不使用任何缓存,如下所示:
x = x.key.get(use_cache=False, use_memcache=False)
在测试中使用无缓存的 get 似乎是可行的方法。