测试 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 脚本中使用测试运行器脚本而且需要在这个层次上测试成功或失败,该特性会很有用。

当所有测试执行完毕后,无论测试通过与否,测试数据库都将被销毁。

Pages: Prev 1 2 3 4 5 6 7 8 ...52 53 54 Next