我正在尝试对模型进行简单测试。我插入并检索模型并检查我插入的所有数据是否存在。我希望这个测试失败的是一个简单的空白模型,但它通过了。这是我必须忍受的测试框架的怪癖吗?我可以设置一个选项来阻止它将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()
答案 0 :(得分:0)
如果模型的所有属性相等,则模型定义为相等。如果你关心身份(你可能不应该......),那么你可以在测试中使用assertIs
。
答案 1 :(得分:0)
事实证明,存储引用是存根的行为。但是,出于TDD目的,我们需要检查模型中是否定义了属性。这样做的简单方法是使用关键字参数。如果我按如下方式编写测试,那么它会按预期失败。
def testFetchRedirectAttribute(self):
act = Action(attr='test phrase)
act.put()
解决了我无法解决问题的直接问题。