Python 测试ndb实体是否已放入数据存储

Python 测试ndb实体是否已放入数据存储,python,unit-testing,google-app-engine,transactions,app-engine-ndb,Python,Unit Testing,Google App Engine,Transactions,App Engine Ndb,我被一个错误咬了一口,我没有正确地检查一个实体是否被放入了数据存储。它特别容易与事务、上下文缓存和memcache混淆 考虑此实体,其中每个方法的目的是增加n并将实体保存到数据存储: class MyEntity(ndb.Model): n = ndb.IntegerProperty() def inc(self): self.n += 1 # self.put() # oops, forgot to put the entity @s

我被一个错误咬了一口,我没有正确地检查一个实体是否被放入了数据存储。它特别容易与事务、上下文缓存和memcache混淆

考虑此实体,其中每个方法的目的是增加
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)
我应该向这些测试中添加什么来确保实体已实际保存到数据存储中?(也就是说,我们没有检查存储在上下文缓存或memcache中的值?)添加足够了吗

ndb.get_context().clear_cache()

在调用
inc
inc\u trans

之后的单元测试中,我做了一些进一步的研究,发现我们可以强制
get
不使用这样的缓存:

x = x.key.get(use_cache=False, use_memcache=False)
使用无缓存的get-in测试似乎是一种可行的方法