1

エンティティがデータストアに置かれたことを正しくチェックしていないバグが少しありました。トランザクションやコンテキスト内のキャッシュやmemcacheで特に混乱します。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) 

私は何を追加する必要がありますエンティティが実際にデータストアに保存されていることを確認するためのこれらのテスト? (つまり、私たちはインコンテキストキャッシュまたはmemcacheのに格納された値をチェックしていないことは?)incinc_transの呼び出しの後にユニットテストに

ndb.get_context().clear_cache() 

を追加することが十分ですか?

答えて

1

もう少し研究を行った後、私たちは、このような任意のキャッシュを使用しないようにgetを強制できることがわかった。

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

テストでノーキャッシュされた取得が移動するための方法のように思える使用。

関連する問題