现在我的Django单元测试存放在mcif/tests.py
。我更喜欢像mcif/tests/foo_test.py
,mcif/tests/bar_test.py
等这样的结构,但是如果我以这种方式组织我的测试,Django就会出问题。
有没有办法实现我想要的东西,或者我必须将所有测试都放在一个文件中?
现在我的Django单元测试存放在mcif/tests.py
。我更喜欢像mcif/tests/foo_test.py
,mcif/tests/bar_test.py
等这样的结构,但是如果我以这种方式组织我的测试,Django就会出问题。
有没有办法实现我想要的东西,或者我必须将所有测试都放在一个文件中?
从Django 1.6版本开始,测试发现机制已经改变。您不再需要从tests/__init__.py
导入所有内容,但是现在您必须确保包含测试的所有文件都与模式test*.py
匹配。
因此,现在你应该拥有app/tests/test_models.py
和app/tests/test_views.py
,而不是app/tests/models.py
和app/tests/views.py
。
您还可以创建一个名为app/tests/test.py
的文件,并从那里包含其他文件。问题在于运行程序将查找与模式test*.py
匹配的文件并执行它们。
tests/
文件夹中创建一个(空的)__init__.py
文件,以便 Pylint 不会显示无法解析视图的错误。 - David Dahan注意:此文描述的是 Django 1.6 之前的行为。请查看 Artur Soler's answer for Django 1.6 and later 获取相关信息。
创建一个包:myapp/tests/
在该包内,可以放置任意数量的不同测试模块。在tests
目录下的__init__.py
文件中,从这些模块导入测试用例(或者采取类似的变形)。
编辑:哇,没注意到你已经提到了tests
包。
重要的是让该包中的所有内容都可用。Django将从该包获取测试用例,因此它们必须在__init__.py
中可见。
[编辑:添加关于 Django 版本 1.6 的说明]
补充一下Artur Soler的出色的答案...
你还可以使用--pattern
选项来指定测试文件的命名方式。
例如,如果你的测试文件命名为foo_test.py
、bar_test.py
等类似的名称,你可以使用以下命令:
$ ./manage.py test --pattern="*_test.py"
from foo_test import *
from bar_test import *
__init__.py
的文件时,该文件夹将作为一个模块。只要该文件夹的父级在Python的sys.path
中,就不需要在settings.py
中进行额外的“注册”,只需导入并使用即可。 - Evgeny__init__.py
中导入了两个模块 - tests.py
和selenium_tests.py
。但是,我该如何选择仅运行selenium测试?我尝试过./manage.py test myapp.selenium_tests
或./manage.py test myapp.tests.slenium_tests
,但它们都无法识别。 - Darwin Techmyapp.
,并且通常需要检查语法错误。 - Evgenymyapp
很有必要,因为在其他应用中有selenium_tests.py
。那么,您有任何想法如何只选定特定应用程序的selenium_tests
吗? - Darwin Tech./manage.py test myapp.tests.selenium_tests
,我认为你需要创建一个 selenium_tests
包而不是文件... - ilovett