App Engine + NoseGAE奇怪的破坏测试

时间:2013-12-19 17:42:29

标签: google-app-engine unit-testing

我正在使用NoseGAE为我的App Engine应用程序编写本地单元测试,但是我的一个测试突然出现问题。我有标准的setUp和tearDown函数,但是一个看似破坏的测试因为我无法辨别。更奇怪的是,每次都不会调用setUp和tearDown。我添加了全局变量来计算setUp / tearDown调用,并且在我的第四次测试(现在看似已经破坏的一次)中,setUp被调用两次并且tearDown被调用一次。此外,当我通过id查询时,存在来自第三个测试的对象之一,但是在其类型的一般查询中不存在。这里有一些代码可以给出奇怪的图片:

class GameTest(unittest.TestCase):
    def setUp(self):
       self.testapp = webtest.TestApp(application)
       self.testbed = testbed.Testbed()
       self.testbed.activate()
       self.testbed.init_datastore_v3_stub(
           consistency_policy=datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=1),
           require_indexes=True,
           root_path="%s/../../../" % os.path.dirname(__file__)
        )

    def tearDown(self):
        self.testbed.deactivate()
        self.testapp.cookies.clear()

    def test1(self):
        ...

    def test2(self):
        ...

    def test3(self):
       ...
       # I create a Game object with the id 123 in this particular test
       Game(id=123).put()
       ...

    def test4(self):
       print "id lookup: ", Game.get_by_id(123)
       print "query: ", Game.query().get()
       self.assertIsNone(Game.get_by_id(123))

这是测试的抽象,但说明了问题。

第4次测试失败,因为它断言具有该id的对象不存在。当我打印出两个陈述时:

id lookup:Game(key = Key('Game',123))

查询:无

id查找显示在test3中创建的对象,但查询查找是EMPTY。这对我来说完全没有意义。此外,我100%确定测试工作得更早。有谁知道这怎么可能?我可能有一些本地损坏的文件导致问题吗?

1 个答案:

答案 0 :(得分:0)

我有点“解决”了这一点。此问题仅在我在其他文件中出现其他测试用例失败时才会重现。一旦我解决了这些,我的所有测试都通过了。我仍然不完全理解为什么其他失败的测试会导致测试平台出现这些奇怪的问题,但对于遇到此问题的其他人,请先尝试修复其他测试用例,看看是否会导致它消失。