存储引用的Google App Engine python数据存储存根?

时间:2014-06-29 06:01:21

标签: python google-app-engine

我正在尝试对模型进行简单测试。我插入并检索模型并检查我插入的所有数据是否存在。我希望这个测试失败的是一个简单的空白模型,但它通过了。这是我必须忍受的测试框架的怪癖吗?我可以设置一个选项来阻止它将refs保留为python对象吗?

在下面,我预计它会在第30行失败,但事实并非如此。它在参考比较中失败,因为我坚持认为参考不同而且它们不是......

import unittest
from google.appengine.ext import ndb
from google.appengine.ext import testbed


class Action(ndb.Model): pass

class ActionTestCase(unittest.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()

    self.testbed.init_datastore_v3_stub()
    self.testbed.init_memcache_stub()


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

  def testFetchRedirectAttribute(self):
    act = Action()
    act.attr = 'test phrase'
    act.put()

    self.assertEquals(1, len(Action.query().fetch(2)))
    fetched = Action.query().fetch(2)[0]
    self.assertEquals(fetched.attr, act.attr)
    self.assertTrue(act != fetched)

if __name__ == '__main__':
    unittest.main()

2 个答案:

答案 0 :(得分:0)

如果模型的所有属性相等,则模型定义为相等。如果你关心身份(你可能不应该......),那么你可以在测试中使用assertIs

答案 1 :(得分:0)

事实证明,存储引用是存根的行为。但是,出于TDD目的,我们需要检查模型中是否定义了属性。这样做的简单方法是使用关键字参数。如果我按如下方式编写测试,那么它会按预期失败。

def testFetchRedirectAttribute(self):
    act = Action(attr='test phrase)
    act.put()

解决了我无法解决问题的直接问题。