Django 1.6+ 测试未发现位于 tests 子目录中的单元测试

5 投票
2 回答
2755 浏览
提问于 2025-04-18 13:33

我看了不少于10个关于Django找不到单元测试的Stack Overflow问题,但每一个都没有解决我的问题。

我正在使用Django 1.65,想让Django找到我的测试。

这是我的文件夹结构:

project
  __init__.py
  my_app
    __init__.py
    tests
      __init__.py
      test_template_tags.py
  my_app2
    __init__.py
    tests
      __init__.py
      test_something_else.py  

我在项目目录下尝试的命令是: python manage.py test my_app

在test_template_tags.py里的代码是:

from django.test import TestCase

class MyTestClass(TestCase):

  def setUp(self):
      pass

  def tearDown(self):
      pass

  def test_something(self):
      self.assertTrue(True)

根据另一个问题的提示,我执行了这个命令 find my_app -name 'test*.py',结果显示所有测试文件都如预期那样列出来了。

当我在项目目录下打开Django的命令行,尝试导入测试类时,一切都正常。

from my_app.tests.test_template_tags import MyTestClass

最后,我把测试代码复制粘贴到应用目录下的tests.py文件里,当然,这样是可以工作的,但这不是我想要的解决方案。

我是不是漏掉了什么明显的小细节?我的所有__init__.py文件都在正确的位置,所有测试文件的前面都有test_,而且my_app也在设置中的INSTALLED_APPLICATIONS里。

2 个回答

1

在你的 __init__.py 文件里,你需要把同一目录下的其他测试模块导入,这样测试运行器才能找到它们。如果你的文件结构是这样的:

project
  __init__.py
  my_app
    __init__.py
    tests
      __init__.py
      test_template_tags.py
  my_app2
    __init__.py
    tests
      __init__.py
      test_something_else.py  

那么 my_app.tests.__init__.py 文件里应该包含:

from test_template_tags import *

my_app2.tests.__init__.py 文件里应该包含:

from test_something_else import *

这样的话,你就可以通过 python manage.py test 来运行你的测试了。

3

在尝试这里的任何答案之前,确保你的测试文件按照约定命名为 test*.py

撰写回答