如何在测试中清除/无效NDB缓存 [英] How to Clear/Invalidate NDB Cache in Tests
问题描述
我有一个简单的 NDB 模型,其实例属性为不是 NDB资产。我想测试当实体从数据存储中被保存和检索时,属性值会丢失。
现在,当实体被检索时,它与实例相同已经被放到数据存储中。
有没有一种编程方式清除/无效 memcache 和 NDB内存中缓存?
这个例子是 pytest 测试,对不起。
b b
$ b $ prefb =lang-py prettyprint-override>
from google.appengine.ext用户(ndb .Model):
name = ndb.TextProperty()
foo = None
class TestNDBModel(object):
def setup (self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_datasto ()
self.testbed.init_memcache_stub()
$ b $ def defard(self) self):
user = User(name ='Andy')
assert user.name =='Andy'
assert user.foo is None
user.foo = 123
assert user.foo == 123
user_key = user.put()
#在这里我需要以某种方式清除缓存,
#以便实体必须是从数据存储检索
retrieve_user = user_key.get()
#这两个现在将失败
assert retrieve_user不是用户
assert retrieve_user.foo是无
解决方案是防止实体被缓存当它被放入数据库时,使用 entity.put(use_cache = False,use_memcache = False)
。
from google。 appengine.ext import testbed,ndb
class User(ndb.Model):
name = ndb.TextProperty()
foo = None
class TestNDBModel(object):
def setup(self):
self.testbed = testbed.Testbed()
self.testbed.activate( )
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()
def teardown(self):
self.testbed.deactivate()
$ b $ def test_foo(self):
user = User(name ='Andy')
assert user.name =='Andy'
assert user.foo is None
user.foo = 123
assert user.foo == 123
#这样可以防止实体被缓存
user_key = user.put(use_cache = False,use_memcache = False)
#实体现在从DB
中获取retrieve_user = user_key.get()
#这两个现在将传递
assert retrieve_user不是user
assert retrieve_user.foo是None
I have a simple NDB Model with an instance attribute, which is not an NDB property. I want to test that the property value gets lost when the entity is saved and retrieved from the datastore.
Now when the entity is retrieved it is the same instance as the one that has been put to the datastore.
Is there a way to programatically clear/invalidate the memcache and the NDB in-memory cache?
The example is a pytest test, sorry for that.
from google.appengine.ext import testbed, ndb
class User(ndb.Model):
name = ndb.TextProperty()
foo = None
class TestNDBModel(object):
def setup(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()
def teardown(self):
self.testbed.deactivate()
def test_foo(self):
user = User(name='Andy')
assert user.name == 'Andy'
assert user.foo is None
user.foo = 123
assert user.foo == 123
user_key = user.put()
# Here I need to clear the cache somehow,
# so that the entity must be retrieved from datastore
retrieved_user = user_key.get()
# These two will now fail
assert retrieved_user is not user
assert retrieved_user.foo is None
The solution is to prevent an entity to be cached when it is being put to the DB with entity.put(use_cache=False, use_memcache=False)
.
from google.appengine.ext import testbed, ndb
class User(ndb.Model):
name = ndb.TextProperty()
foo = None
class TestNDBModel(object):
def setup(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()
def teardown(self):
self.testbed.deactivate()
def test_foo(self):
user = User(name='Andy')
assert user.name == 'Andy'
assert user.foo is None
user.foo = 123
assert user.foo == 123
# This prevents the entity to be cached
user_key = user.put(use_cache=False, use_memcache=False)
# The entity is now retrieved from DB
retrieved_user = user_key.get()
# These two will now pass
assert retrieved_user is not user
assert retrieved_user.foo is None
这篇关于如何在测试中清除/无效NDB缓存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!