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

时间:2017-04-22 17:56:57

标签: python unit-testing google-app-engine transactions app-engine-ndb

我已经找到了一个错误,我没有正确检查实体是否被放入数据存储。它在事务和上下文缓存和内存缓存方面尤其令人困惑。

考虑这个实体,其中每个方法的意图是增加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()
在致电incinc_trans

之后,

进行单元测试

1 个答案:

答案 0 :(得分:1)

在做了一些研究之后,我发现我们可以强制get不使用这样的任何缓存:

x = x.key.get(use_cache=False, use_memcache=False)

使用no-cached get in测试似乎是最佳选择。