测试 Django 程序(三)
Posted in Python on 十二月 17th, 2007 by admin – Be the first to comment理解测试输出
运行测试时,你会看到测试运行器反馈了一系列信息:
1 2 3 4 5 | Creating test database... Creating table myapp_animal Creating table myapp_mineral Loading 'initial_data' fixtures... No fixtures found. |
这告诉你测试运行器正在创建一个测试数据库,一个空的、将被用于任何需要数据库的测试(即,模型测试)的数据库。
别担心——测试运行器不会碰你“真正的”(产品)数据库。它创建了一个单独的数据库,仅仅用来作测试。这个测试数据库的名字由配置文件中 DATABASE_NAME 加 test_ 前缀组成。如果你想使用其它的名字,在配置中指定 TEST_DATABASE_NAME 的值即可。
除了使用单独的数据库外,其它选项测试运行器都使用与你配置文件相同的设置:DATABASE_ENGINE、DATABASE_USER、DATABASE_HOST等等。测试数据库使用你指定的 DATABASE_USER 用户创建,所以你需要确定该用户有足够的权限可以在你的系统中创建数据库。
Django 开发版本中的更新:为了更细粒度的控制你测试数据库的字符编码,可以使用 TEST_DATABASE_CHARSET 设置。如果你使用 MySQL,你还可以使用 TEST_DATABASE_COLLATION 设置来控制你测试数据库具体的连接校对。这些高级选项的详细资料请参看配置文档。
关于“连接校对”
这是我对 TEST_DATABASE_COLLATION 中 collation 一词的翻译,我只是权且这么写,准确的说法我并不知道,如果你知道,请告诉我。
但我并没有胡来,因为看到 phpMyAdmin 中似乎就是这么翻的。在 MySQL 5 中,你除了可以为数据库设置默认字符集外,还可以设置连接校对,甚至可以为某字段设置校对(phpMyAdmin 中翻译为“整理”),大致相当于为该字段设置特定的字符编码。
测试数据库一旦创建完毕,Django 就开始运行你的测试。如果一切正常,你会看到如下信息:
1 2 3 4 | ---------------------------------------------------------------------- Ran 22 tests in 0.221s OK |
如果有某些测试失败,你则会看到有关该失败测试的完整细节:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ====================================================================== FAIL: Doctest: ellington.core.throttle.models ---------------------------------------------------------------------- Traceback (most recent call last): File "/dev/django/test/doctest.py", line 2153, in runTest raise self.failureException(self.format_failure(new.getvalue())) AssertionError: Failed doctest test for myapp.models File "/dev/myapp/models.py", line 0, in models ---------------------------------------------------------------------- File "/dev/myapp/models.py", line 14, in myapp.models Failed example: throttle.check("actor A", "action one", limit=2, hours=1) Expected: True Got: False ---------------------------------------------------------------------- Ran 2 tests in 0.048s FAILED (failures=1) |
详细解释该错误输出不在本文范围内,而且它其实很浅显直白。你可以参考 Python 的 unittest 库。
请注意测试运行器的返回代码是失败测试和错误测试加起来的数目。如果通过了所有测试,该返回代码是 0。如果你在 shell 脚本中使用测试运行器脚本而且需要在这个层次上测试成功或失败,该特性会很有用。
当所有测试执行完毕后,无论测试通过与否,测试数据库都将被销毁。