组织Django单元测试

时间:2011-03-01 21:39:09

标签: django unit-testing

现在我的Django单元测试生活在mcif/tests.py。我希望有更多类似mcif/tests/foo_test.pymcif/tests/bar_test.py等的东西,但如果我按照这种方式组织我的测试,Django会翻转。

有没有办法做我正在尝试做的事情,或者我必须将所有测试都放在一个文件中?

4 个答案:

答案 0 :(得分:114)

从Django的1.6版开始,测试发现机制发生了变化。您不再需要从tests/__init__.py导入所有内容,但现在您必须确保包含测试的所有文件都与模式test*.py匹配。

所以,现在应该有app/tests/models.pyapp/tests/views.py,而不是app/tests/test_models.pyapp/tests/test_views.py

您还可以创建一个名为app/tests/test.py的文件,并从那里包含您的其他文件。问题是跑步者将寻找与模式test*.py匹配的文件并执行它们。

答案 1 :(得分:17)

注意:这描述了Django 1.6之前的行为。请参阅Artur Soler's answer for Django 1.6 and later

制作一个包裹:myapp/tests/

在包中,根据需要放置尽可能多的不同测试模块。在__init__.py内的tests中,从这些模块导入测试。 (或者这个主题的一些变化。)

编辑:哇,没注意到你已经提到了tests包。

重要的是从包中获取所有内容。 Django将从包中获得测试,因此必须在__init__.py中显示。

[编辑:添加了关于Django 1.6版的说明]

答案 2 :(得分:2)

在__init__.py中输入类似的内容:

from foo_test import *
from bar_test import *

答案 3 :(得分:2)

只需添加到Artur Soler的精彩answer ...

您还可以使用--pattern选项指定测试文件的命名方式。

例如,如果您的测试文件名为foo_test.pybar_test.py等,则可以使用:

$ ./manage.py test --pattern="*_test.py"