如何在Google App Engine上单元测试Django视图?
我在使用Django的Client类在Google App Engine上运行单元测试时遇到了困难。我下载了GAEUnit(适用于Django的2.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
我终于搞清楚这里出错的地方了。我犯了两个错误:
- 在 app.yaml 文件中,url: /test.* 必须放在 url:/.* 之前。否则,当请求到达 /test URL 时,它会先被匹配到 /.*,这样就不会走到 /test.* 的处理程序了。
- 注意不要把 GAEUnit 包里的所有文件都复制到你的项目根目录!GAEUnit 文件夹里有一个 urls.py 文件,如果你不留意,它会覆盖掉你自己的那个文件。在我的情况下就是这样。我只是把我原来的 urls.py 恢复回来了。
- 在使用 django 测试 Client 时,如果你想访问 response.template 或 response.context 属性,你需要确保调用 django.test.utils.setup_test_environment(),否则 template 和 context 的值会是 Nothing。我在我的测试模块里,在最后一行调用了这个。
结果:单元测试正常工作了!