如何在Google App Engine上对Django视图进行单元测试?

时间:2009-11-23 15:59:07

标签: python django google-app-engine

我正在努力使用Google App Engine上的Django Client 类来运行单元测试。我下载了GAEUnit(Django的v2.0a),我试图将它用作我的测试框架(也许我应该使用别的东西?)

我按照指示将所有GAEUnit文件复制到我的项目根目录中,然后修改我的app.yaml文件。目前app.yaml看起来如下:

application: myapp
version: 1
runtime: python
api_version: 1

handlers:
- url: /static
  static_dir: static

- url: /.*
  script: django_bootstrap.py

- url: /test.*
  script: gaeunit.py

我还修改了settings.py以将gaeunit添加为应用程序...(来自settings.py的代码段)

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'gaeunit',
)

我的单元测试类位于'test'文件夹中,看起来如下(非常简单):

import unittest

class Test(unittest.TestCase):

    def testName(self):
        self.assertTrue(False)

if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()

但是,当我尝试通过导航到http://localhost:8080来运行我的应用程序时,它会因以下错误而失败:

ViewDoesNotExist at /
Could not import gaeunit.gaeunit. Error was: No module named gaeunit

gaeunit.py肯定存在于该文件夹中。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我设法弄清楚这里出了什么问题。我犯了两个错误:

  1. app.yaml 中,url:/test.*必须之前 url:/。*(否则/ test网址将与/.*匹配在进入/test.*处理程序之前)
  2. 注意将GAEUnit包中的所有文件复制到项目根目录中! GAEUnit文件夹包含一个urls.py文件,如果您没有注意,它将覆盖您的文件。在我的情况下发生了这种情况。我只是恢复了原来的urls.py.
  3. 使用django test Client 时,如果您打算访问response.template或response.context属性,则需要确保调用 django.test.utils。 setup_test_environment(),否则模板和上下文将 Nothing 。我在我的测试模块中调用它,就在底部。
  4. 结果:工作单位测试!