[英]GAE test to verify that ndb entity was **not** put in the datastore
很簡單,我想運行一些代碼並驗證沒有類型MyEntity(ndb.Model)
實體被放入數據存儲區。
我已經嘗試過做MyEntity.query().fetch(keys_only=True)
,但這似乎並不強烈一致(即它沒有顯示我剛剛添加的一個實體),所以返回一個空列表是不是真實的確認。 (我應該補充說我正在使用testbed.init_datastore_v3_stub
並且我已經嘗試過datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=1)
和MasterSlaveConsistencyPolicy()
沒有成功。)
我認為有一種方法可以對所有類型的鍵執行強烈一致的“獲取”,但現在我找不到任何支持它的文檔。
我知道如果我有一個Key,我可以做一個強烈一致的獲取,但是如何轉換為驗證沒有添加實體,所以沒有關鍵可以獲得?
好吧,除了正常的單元測試測試平台之外,我終於通過全局上下文禁用了ndb緩存 (除了如何清除/使測試中的NDB緩存無效 )。
也幫助:
class NdbTestbedNoCachingStronglyConsistentMixin(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
policy = None
# policy = datastore_stub_util.MasterSlaveConsistencyPolicy()
# policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=1.0)
self.testbed.init_datastore_v3_stub(consistency_policy=policy)
# self.testbed.init_memcache_stub()
# It's not enough (or necessary) to use stubs for datastore and memcache -
# we also need to change ndb policy to ensure that datastore queries
# are strongly-consistent
cxt = ndb.get_context()
def disallow(*args, **kwargs):
return False
cxt.set_cache_policy(disallow)
cxt.set_memcache_policy(disallow)
super(NdbTestbedNoCachingStronglyConsistentMixin, self).setUp()
def tearDown(self):
super(NdbTestbedNoCachingStronglyConsistentMixin, self).tearDown()
self.testbed.deactivate()
def _get_entity_keys():
return MyNdbEntity.query().fetch(keys_only=True)
class TestMyEntity(NdbTestbedNoCachingStronglyConsistentMixin):
def tearDown(self):
super(TestMyEntity, self).tearDown()
# Verify our assumptions that no entities persist between tests
assert MyNdbEntity.get_by_identifier(self.account, TEST_IDENTIFIER) is None
assert not _get_entity_keys()
def test_get_uri_should_retrieve_existing_entity(self):
provider.get_uri(TEST_IDENTIFIER) # creates entity
all_assets_keys = _get_entity_keys()
created_asset = MyNdbEntity.get_by_identifier(self.account, TEST_IDENTIFIER)
self.assertIn(created_asset.key, all_assets_keys)
provider.get_uri(TEST_IDENTIFIER)
all_assets_keys_after_get = _get_entity_keys()
self.assertSequenceEqual(all_assets_keys_after_get, all_assets_keys)
def test_get_uri_should_create_entity_and_prefix_identifier_with_security_id(self):
expected_identifier = TEST_SECURITY_ID + '-' + TEST_IDENTIFIER
expected_uri = VIEWER_IMAGE_BASE_URI % expected_identifier
uri = provider.get_uri(TEST_IDENTIFIER)
image = _get_entity_keys()[0].get()
self.assertEqual(image.identifier, expected_identifier)
self.assertEqual(uri, expected_uri)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.