2013-05-07 2 views
1

Google App Engine, Python 2.7 с помощью ОПРСGAE объект вставлен, но отсчет() ноль

Когда я запускаю следующий тест - он выдает ошибку на последнем утверждают ->

self.assertEqual(models.Log.query().count(), 1) 
AssertionError: 0 != 1 

Вход является базовый класс ndb.Model. Выполнение этих тестов Цените помощь.

import unittest2 

from google.appengine.ext import ndb 
from google.appengine.ext import testbed 
from google.appengine.datastore import datastore_stub_util 

import rm.base.models as models 

class TestModels(unittest2.TestCase): 

    def setUp(self): 
     # First, create an instance of the Testbed class. 
     self.testbed = testbed.Testbed() 
     # Then activate the testbed, which prepares the service stubs for use. 
     self.testbed.activate() 
     # Create a consistency policy that will simulate the High Replication consistency model. 
     self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=0) 
     # Initialize the datastore stub with this policy. 
     self.testbed.init_datastore_v3_stub(consistency_policy=self.policy) 

    def tearDown(self): 
     self.testbed.deactivate() 

    def testModelsLog(self): 
     l = models.Log(comment='hello kitty') 
     l.put() 
     self.assertEqual(l.comment, 'hello kitty') 
     self.assertTrue(l.user is None) 
     self.assertEqual(models.Log.query().count(), 1) 

ответ

3

Что вы хотите сказать?

Ожидается утверждение AssorionError.

Вы не делаете сильно последовательный запрос,

вы читали https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

Как он говорит: «Для того, чтобы получить сильно последовательные результаты запроса, вам нужно использовать запрос предка, ограничивающий результаты одного группы лиц ". которые вы не делаете.

+0

Спасибо Тим. Я совершенно новичок в этом, и я изучаю веревки. –

+0

Стоит перечитать ваше оригинальное сообщение. Вы действительно не задали вопрос, просто сделали заявление, а затем сказали: «Цените помощь», а это значит, что мы должны угадать, о чем вы действительно спрашиваете. –

+0

Поскольку эту модель согласованности следует ожидать в GAE, каков ожидаемый способ обеспечения предотвращения дублирования ключей при вставке? например: если у меня есть поле типа первичного ключа, могу ли я каким-то образом объединить его с ключом? использовать _pre_put_hook, чтобы проверить это? –

1

Обратите внимание, что вы настраиваете PseudoRandomHRConsistencyPolicy с вероятностью 0. Это означает, что 0 является ожидаемым результатом для запроса count.

Это не отражает «нормальное» поведение, но как хранилище данных может работать в экстремальных условиях.

Чтобы проверить нормальные операции, не добавляйте в свои тесты политику PseudoRandomHRConsistencyPolicy, если это не то, что вам действительно нужно проверить.

https://developers.google.com/appengine/docs/python/tools/localunittesting#Writing_HRD_Datastore_Tests