现在我的Django单元测试生活在mcif/tests.py
。我希望有更多类似mcif/tests/foo_test.py
,mcif/tests/bar_test.py
等的东西,但如果我按照这种方式组织我的测试,Django会翻转。
有没有办法做我正在尝试做的事情,或者我必须将所有测试都放在一个文件中?
答案 0 :(得分:114)
从Django的1.6版开始,测试发现机制发生了变化。您不再需要从tests/__init__.py
导入所有内容,但现在您必须确保包含测试的所有文件都与模式test*.py
匹配。
所以,现在应该有app/tests/models.py
和app/tests/views.py
,而不是app/tests/test_models.py
和app/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.py
,bar_test.py
等,则可以使用:
$ ./manage.py test --pattern="*_test.py"