gpt4 book ai didi

unit-testing - GAE 测试以验证 ndb 实体是否**未**放入数据存储区

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:28 25 4
gpt4 key购买 nike

非常简单,我想运行一些代码并验证没有实体类型MyEntity(ndb.Model)被放入数据存储。

我试过 MyEntity.query().fetch(keys_only=True),但这似乎不是强一致的(即它没有显示我的实体)刚刚添加),所以返回一个空列表不是真正的确认。 (我应该补充一点,我正在使用 testbed.init_datastore_v3_stub 并且我已经尝试过 datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=1)MasterSlaveConsistencyPolicy() 没有成功。)

我认为有一种方法可以对所有类型的键进行高度一致的“获取”,但现在我找不到任何文档来支持它。

我知道如果我有一个 key ,我可以执行强一致性获取,但是这将如何转化为验证添加实体,因此没有 key 可获取?

最佳答案

好吧,我终于在disabling the ndb cache via global context 之前让它工作了| (由 How to Clear/Invalidate NDB Cache in Tests 提示)除了 normal unit testing testbeds .

还帮助了:

辅助混合:

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)

关于unit-testing - GAE 测试以验证 ndb 实体是否**未**放入数据存储区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com