Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何禁用Django';什么是测试发现?_Python_Django - Fatal编程技术网

Python 如何禁用Django';什么是测试发现?

Python 如何禁用Django';什么是测试发现?,python,django,Python,Django,这是一种不寻常的情况——大多数Django用户希望Django的测试运行程序找到他们所有的测试 我正在处理一个python库,其中包含几个使用不同配置运行的测试套件,因此我不希望发现从错误的配置中查找和运行测试。我如何完全禁用发现并依赖于1.6之前的行为,即仅对已安装的应用程序中明确声明的应用程序运行测试 我的图书馆结构: library/ # django app used by others tests/ # custom test suites here core/

这是一种不寻常的情况——大多数Django用户希望Django的测试运行程序找到他们所有的测试

我正在处理一个python库,其中包含几个使用不同配置运行的测试套件,因此我不希望发现从错误的配置中查找和运行测试。我如何完全禁用发现并依赖于1.6之前的行为,即仅对已安装的应用程序中明确声明的应用程序运行测试

我的图书馆结构:

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

之外发现测试,如果没有安装必要的应用程序,您可以这样做。