Python 如何禁用Django';什么是测试发现?
这是一种不寻常的情况——大多数Django用户希望Django的测试运行程序找到他们所有的测试 我正在处理一个python库,其中包含几个使用不同配置运行的测试套件,因此我不希望发现从错误的配置中查找和运行测试。我如何完全禁用发现并依赖于1.6之前的行为,即仅对已安装的应用程序中明确声明的应用程序运行测试 我的图书馆结构:Python 如何禁用Django';什么是测试发现?,python,django,Python,Django,这是一种不寻常的情况——大多数Django用户希望Django的测试运行程序找到他们所有的测试 我正在处理一个python库,其中包含几个使用不同配置运行的测试套件,因此我不希望发现从错误的配置中查找和运行测试。我如何完全禁用发现并依赖于1.6之前的行为,即仅对已安装的应用程序中明确声明的应用程序运行测试 我的图书馆结构: library/ # django app used by others tests/ # custom test suites here core/
library/ # django app used by others
tests/ # custom test suites here
core/ # tests of core functionality
custom/ # tests of a custom feature requiring separate config
contrib/ # tests for assorted contrib features, also requiring separate config
manage_core.py # separate manage.py files for each "project"
manage_custom.py # these specify settings file to use.
manage_contrib.py
settings.py # base settings for all tests
settings_core.py # settings for 'core' tests including unique INSTALLED_APPS
settings_custom.py # settings for 'custom' tests; different INSTALLED_APPS
settings_contrib.py # settings for 'contrib' tests; different INSTALLED_APPS
问题在于,此命令应该只运行“contrib”测试套件的测试,同时也在查找和运行“core”的测试:
/manage\u contrib.py test contrib.tests
Hmm不幸的是,我没有意识到设置参数可能会让你告诉unittest只从单个应用程序运行(a-la“settings.test\u DIRECTORIES=settings.INSTALLED\u apps”),但是如果你能够给你的测试一个唯一的命名约定,您可以在运行测试套件时使用--pattern=选项
例如,如果你有
/myapp/tests/test_a_models.py
/myapp/tests/test_b_models.py
您只能使用/manage.py测试运行a——模式='*\u a\u*'
然后使用/manage.py测试运行b——模式='*\u b\u*'
当然不是很理想,但可能会完成这项工作,这取决于您在自己的应用程序中对测试命名约定的灵活性。Django文档中没有该选项,但命令行有一个选项,可通过
/manage.py help test
找到:
-t TOP_LEVEL, --top-level-directory TOP_LEVEL
Top level of project for unittest discovery.
令人困惑的是,指定要测试的模块似乎不会阻止测试发现,但指定子目录会阻止测试发现,如下所示:
/manage\u contrib.py test contrib.tests-t./contrib/
这似乎阻止了在contrib
之外发现测试,如果没有安装必要的应用程序,您可以这样做。