如何禁用Django的测试发现?

时间:2017-06-14 17:07:03

标签: python django

这是一个不寻常的情况 - 大多数Django用户希望Django的测试运行员找到他们所有的测试。

我正在开发一个python库,其中包含多个运行不同配置的测试套件,所以我不希望发现从错误的配置中查找和运行测试。如何完全禁用发现并依赖于仅在INSTALLED_APPS中显式声明的应用程序运行测试的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_contrib.py test contrib.tests

2 个答案:

答案 0 :(得分:1)

Django文档中缺少它,但命令行有一个选项,通过function multiplyBetween(num1, num2) { if (isNaN(num1) || isNaN(num2)) return NaN; if (num1 === 0 || num2 === 0) return 0; if (num1 === num2) return 1; if (num2 < num1) { return 0; } return num1 * multiplyBetween(num1 + 1, num2) } console.log(multiplyBetween(2, 5));找到:

./manage.py help test

令人困惑的是,指定要测试的模块似乎不会阻止测试发现,但指定子目录会这样做:

-t TOP_LEVEL, --top-level-directory TOP_LEVEL Top level of project for unittest discovery.

这似乎阻止发现位于./manage_contrib.py test contrib.tests -t ./contrib/之外的测试。

答案 1 :(得分:0)

嗯,我很遗憾不知道一个设置参数,可能让你告诉unittest只能从各个应用程序运行(a-la“settings.TEST_DIRECTORIES = settings.INSTALLED_APPS”)但是如果你能够给你的测试一个独特的命名约定,您可以在运行测试套件时使用--pattern =选项。

例如,如果你有

/myapp/tests/test_a_models.py
/myapp/tests/test_b_models.py

您只能使用./manage.py test --pattern='*_a_*'运行,然后使用./manage.py test --pattern='*_b_*'

运行b

绝对不理想,但可能会完成工作,具体取决于您在自己的应用程序中使用测试命名约定的灵活性。