簡體   English   中英

GAE測試驗證ndb實體是否** **放入數據存儲區

[英]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緩存無效 )。

也幫助:

助手Mixin:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM