【问题标题】:Django Package tests not found找不到 Django 包测试
【发布时间】:2012-09-06 22:28:14
【问题描述】:

我手头有一个奇怪的问题。

我正在创建一个 django 包,并想为它提供一些测试用例。

包名为 ajax_forms,完整路径是我的 PYTHONPATH 的一部分。 该目录还包含一个测试目录(带有__init__.py 文件)、一个tests.py 文件(包含测试)和一个urls.py 文件。

现在我想运行测试。

ajax_forms 父目录在 INSTALLED_APPS 中有一个带有 ajax_forms 的示例项目设置。

但我似乎不能让测试运行:

 >> ./manage.py test ajax_forms
Creating test database for alias 'default'...

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database for alias 'default'...

没有找到测试,所以我尝试更具体:

 >> ./manage.py test ajax_forms.tests
....
raise ValueError("Test label '%s' does not refer to a test" % label)
ValueError: Test label 'ajax_forms.tests' does not refer to a test
(ajax-validation)

即使 ./manage.py ajax_forms.tests.tests.AjaxFormViewTest 也找不到测试并给出与上述相同的错误。

但是尝试从 ./manage.py shell 导入测试用例可以正常工作

In [2]: from ajax_forms.tests.tests import AjaxFormViewTest

我有点不知所措,不知道发生了什么。

【问题讨论】:

  • 测试包中的那个文件真的叫init.py吗?而不是__init__.py?
  • 抱歉,应该是 _____init_____.py 而不是 init.py。所以我认为没有问题。
  • 你又做了一次 :) 使用反引号 (` `) 标记代码 sn-ps 或文件名,这样它们就不会被破坏

标签: python django unit-testing


【解决方案1】:

您需要将from tests import * 放入您的__init__.py 文件中

Django 将在您的应用程序中查找名为测试的包/模块,然后查询其命名空间以查找测试用例。在这种情况下,它会查看您的测试包的命名空间(来自 init.py 文件),但没有发现任何内容。通过在__init__.py 文件中进行导入,然后您会将测试用例从您的测试模块导入到测试包的命名空间中,django 将能够找到它们并运行它们。

【讨论】:

  • 当然,如果测试目录中只有一个文件,那么拥有该目录根本没有意义:只需将 tests.py 文件移至上一层即可。
【解决方案2】:

这个问题的另一个解决方案是使用更智能的测试运行器。您可以尝试nosedjango_nose - 它会在这种情况下发现测试。如果您不想安装额外的应用程序,@Ctrlspc 解决方案是解决此问题的唯一方法。

【讨论】:

  • 我刚刚开始使用 django-nose,我也可以推荐这种方法,我喜欢这样一个事实,即您可以轻松获得收敛和其他鼻子好东西,但融入 django!
【解决方案3】:

您可以在应用程序中添加models.py 文件,将新应用程序添加到已安装的应用程序中,django 将找到tests.py 文件,而无需向__init__.py 添加任何内容。

我猜@Ctrlspc 方法和这个方法都有点脏。所以任何选择都可以

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多