Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 应用程序引擎&x2B;鼻盖奇破试验_Google App Engine_Unit Testing - Fatal编程技术网

Google app engine 应用程序引擎&x2B;鼻盖奇破试验

Google app engine 应用程序引擎&x2B;鼻盖奇破试验,google-app-engine,unit-testing,Google App Engine,Unit Testing,我正在使用NoseGAE为我的应用程序引擎应用程序编写本地单元测试,但是我的一个测试突然出了问题。我有标准的设置和拆卸功能,但有一个测试似乎因为我看不出来的原因而中断了。更奇怪的是,安装和拆卸并不是每次都被调用。我添加了全局变量来计算setUp/tearDown调用的次数,在我的第四个测试中(现在看起来已经失败了),setUp被调用了两次,tearDown被调用了一次。此外,当我按id查询第三个测试中的一个对象时,它就存在了,而不是在一般的类型查询中。下面是一些代码,给出了一幅奇怪的画面: cl

我正在使用NoseGAE为我的应用程序引擎应用程序编写本地单元测试,但是我的一个测试突然出了问题。我有标准的设置和拆卸功能,但有一个测试似乎因为我看不出来的原因而中断了。更奇怪的是,安装和拆卸并不是每次都被调用。我添加了全局变量来计算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))
这是测试的抽象,但说明了问题

第四个测试失败,因为它断言具有该id的对象不存在。当我打印出这两条语句时:

id查找:游戏(key=key('Game',123))

查询:无


id查找显示在test3中创建的对象,但查询查找为空。这对我来说毫无意义。此外,我100%确信测试在更早的时候起作用。有人知道这是怎么可能的吗?我可能有一些本地损坏的文件导致问题吗?

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

我从来都无法让nose gae在NDB中正常工作,除非我在没有沙盒的情况下运行nose测试。它以奇怪和令人困惑的方式失败,(似乎)没有一致的理由。。。我希望有人能给出一个像样的答案,但同时尝试使用该选项可能会对您有所帮助。谢谢Greg,但我应该提到的是,我已经在使用该标志运行它了。这是一种使用概率<1的
伪随机HrConsistencyPolicy
集所期望的行为。您是否能够断言您的策略正在按预期启动?为了解决您对调用setUp和tearDown的次数的第二个担忧,我将此添加到setUp中以避免出现任何不一致,我也遇到了这种情况:
def setUp(self):如果不是hasattr(self),“\u test\u setUp\u complete”)或者不是self.\u test\u setup\u complete:self.\u test\u setup\u complete=True
人力资源一致性策略的概率设置为1,因此这不是问题所在。我注意到并没有预料到的是,测试并没有按照我在unittest.TestCase类上编写的顺序运行。这就是为什么我认为没有调用setUp/tearDown会有问题;在第四个测试中,我看到了两个设置调用,但实际上,第四个测试实际上被称为第二个。