【问题标题】:Test that ndb entity was put to data store测试 ndb 实体被放入数据存储
【发布时间】:2017-04-22 17:56:57
【问题描述】:

我被一个错误所困扰,我没有正确检查实体是否已放入数据存储。它与事务以及上下文缓存和内存缓存特别混淆。

考虑这个实体,其中每个方法的目的是增加 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 之后进行单元测试?

【问题讨论】:

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


    【解决方案1】:

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

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

    在测试中使用无缓存获取似乎是可行的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      相关资源
      最近更新 更多