ChatGPT解决这个技术问题 Extra ChatGPT

Django 测试运行程序找不到测试

我是 Python 和 Django 的新手,我正在通过创建一个饮食管理网站来学习,但我完全被运行单元测试所击败。我发现的所有文档和博客都说,只要可以从tests.py 中发现,tests.py 与models.py 和您的测试类子类TestCase 位于同一个文件夹中,它都应该被自动拾取。这对我不起作用,当我运行 manage.py test <myapp> 时,它没有找到任何测试。

我从他们自己的包中的所有测试开始,但已将其简化为仅在我的 tests.py 文件中的所有测试。当前的 tests.py 看起来像:

import unittest
from pyDietTracker.models import Weight
from pyDietTracker.weight.DisplayDataAdapters import DisplayWeight

class TestDisplayWeight(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def testGetWeightInStone_KG_Correctly_Converted(self):
        weight = Weight()
        weight.weight = 99.8

        testAdapter = DisplayWeight(weight)
        self.assertEquals(testAdapter.GetWeightInStone(), '15 st 10 lb')   

我也尝试过继承 Django TestCase 类,但这也不起作用。我正在使用 Django 1.1.1、Python 2.6 并且正在运行 Snow Leopard。

我确定我遗漏了一些非常基本和明显的东西,但我就是不知道是什么。有任何想法吗?

编辑:评论后快速更新

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'pyDietTracker',
 )

为了让测试运行,我正在运行 manage.py test pyDietTracker

您正在运行什么命令来执行这些命令?您的 settings 长什么样?此应用程序是否在 INSTALLED_APPS 列表中?
我已经用我的 INSTALLED_APPS 更新了问题,是否有另一部分相关的设置?谢谢
您实际上收到了哪些信息?
我没有收到错误消息,它只是说 0 个测试运行。我远离计算机 atm,但是当我尝试直接命名测试类时,我得到一个错误,类似于不合适的测试用例。我会在我回来的时候准确地发布它。
@L2Type:您不能轻易地直接命名 TestCase 类。您命名应用程序,Django 运行程序通过查看 models.py 和 tests.py 来完成它的发现工作

E
Eduardo

我有同样的问题,但我的根本原因是不同的。

作为 OP,我得到了 Ran 0 tests

但事实证明,测试类中的测试方法必须以关键字 test 开头才能运行

例子:

from django.test import TestCase


class FooTest(TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def this_wont_run(self):
        print 'Fail'

    def test_this_will(self):
        print 'Win'

此外,其中包含您的 TestCases 的文件必须以 test 开头。


如果它仍然不起作用,请检查文件名是否与此模式匹配: test*.py 这就是 django 选择测试套件文件的方式。 django doc
对于其他读者,还有一个变化是使用 Django 的 TestCase 代替 unittest.TestCase
那是我错过的事情。谢谢!
这个技巧对我有用。我没有在函数前面加上“test_”
什么我被困在这几天以来,阅读大量的文档,我是完全愚蠢还是在 django 文档中根本没有突出显示?我希望这会是这样的:TEST.PY 101:让你的函数从 test_ 开始,感谢您提供的准确且非常有用的答案!
F
FlyingZipper

如果您将 yourapp/tests 包/样式用于单元测试,请确保您的 tests 文件夹中有一个 __init__.py(因为这就是使它成为 Python 模块的原因!)。


是的!如果您为所需的应用程序使用自定义文件夹来运行测试(例如:my_apps/app_name/",那么您应该在 my_apps/ 中创建 __init__.py 文件。
c
codingrhythm

我可以为特定应用程序运行测试,例如

python project/manage.py test app_name

但是当我跑步时

python project/manage.py test

找到 0 个测试

弄清楚我需要在与 manage.py 相同的目录中运行它

所以解决方案是, cd 到项目目录并运行

python manage.py test

这对我有帮助,谢谢。似乎测试运行程序发现了当前工作目录,该目录本身必须是 Python 包 (docs.djangoproject.com/en/dev/topics/testing/overview/…)。或者,您可以调用这样的测试 python project/manage.py test project/
非常简单的解决方案,但如果您现在为用户 python src/manage.py test 提供解决方法并运行所有测试,请分享并更新 aswer。非常感谢该解决方案对我有用。
T
Thijs

就我而言,应用程序文件夹本身缺少 __init__.py。这会导致测试将使用 python manage.py test project.app_name 而不是使用 python manage.py test 运行的行为。

project/
  app_name/
    __init__.py   # this was missing

谢谢!您帮我找到了我的问题,即我创建了一个文件夹“tests”来保存我的测试脚本,但忘记添加文件 init.py
同样的事情:我有 project/apps/core,而 project/apps 中没有 __init__.py
感谢您发布此信息 - 我创建了一个 tests 子文件夹,但忘记在该方向下方包含一个 __init__.py。添加它就可以了!
谢谢。为这个问题苦苦挣扎了很久。最后将 __init__.py 添加到应用程序有效。最初我只是在测试文件夹中检查 __init__.py
d
devsnd

当您使用 tests 模块而不是 tests.py 时,也可能会发生这种情况。在这种情况下,您需要将所有测试类导入测试模块的 __init__.py,例如

tests/
    __init__.py
    somemodule.py

在您的 __init__.py 中,您现在需要像这样导入 somemodule

from .somemodule import *

这是我的问题,感谢您解决。问候!
这可能有效,但我认为这不是正确的解决方法,因为我有另一个不需要此导入来运行测试的 python 项目。
那也是我的问题。非常感谢!
我正在使用脚本来运行我的测试。几个月后换了一台新电脑,测试出乎意料地坏了。这解决了它。不知道有什么区别。也许是不同的python版本。也许是一个更新的 Django ......
D
Daniel Gasull

如果您的 tests.py 中有语法错误,也会发生这种情况。


F
Flimm

在我的例子中,我输入了 def 而不是 class。代替

class TestDisplayWeight(TestCase): # correct!

我有

def TestDisplayWeight(TestCase): # wrong!

佚名

解决了。

事实证明我已经完成了 django-admin.py startproject pyDietTracker 但没有完成 python manage.py startapp myApp。返回并执行此操作后,它确实按记录工作。看来我有很多关于阅读以及 Django 中站点和应用程序之间的区别的知识。

感谢您对 S.Lott 和 Emil Stensröm 的帮助。我希望我能接受你的两个答案,因为他们都得到了很多帮助。

最重要的一课测试仅在应用程序级别而不是站点级别有效


D
David Boshton

这是我刚刚拥有的另一个:检查您的测试文件不可执行。我的 virtualbox 将它们自动挂载为可执行文件,因此测试发现完全错过了它们。在有人告诉我问题出在解决方法之前,我必须将它们添加到相关的 __init__.py 文件中,但现在它们已被删除,并且不可执行并且一切都_just_works。


在 Docker Desktop 上的 docker 映像中运行测试时,我遇到了同样的问题。解决方案来自这个答案。我在 /{app}/tests/ 文件夹中有很多 test_*.py 。在 /{app}/tests/__init__.py 中导入此测试时已解决。非常感谢你的洞察力。
B
Benyamin

就我而言,我想念以 test_ 开头的函数名称,以及在运行测试时使用:

python manage.py test myapp

结果是:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).

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

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

似乎 Django 无法识别我的测试!

然后我像这样更改 myproject/myapp/test.py 文件:

from django.test import TestCase
# Create your tests here.
class apitest(TestCase):

    def test_email(self):
        pass
    def test_secend(self):
        pass

之后的结果是:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 2.048s

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

N
Nils

当我在同一个 Django 应用程序目录中有一个 test.py 文件和一个 test/ 子目录时,我就发生了这种情况。我想无论我是在寻找测试模块(在 test.py 中)还是测试包(在 test/subdir 中),我都在混淆 python 或测试运行程序。


A
Abdullah Mujahid

我知道我在这一点上迟到了,但我也遇到了麻烦

Found 0 test(s).
System check identified no issues (1 silenced).

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

OK

我已经遵循了所有步骤,但我仍然面临同样的问题。我的修复是我错过了测试目录中的 __init__.py 文件。添加文件并重新运行命令解决了我的问题。

强调一下:

确保您有 __init__.py 个文件


这解决了我的问题(y)
N
Nilesh

如果您尝试在主应用程序中运行测试,例如 my_app/my_app/ ,请确保您已检查以下内容:

应用程序名称列在 settings.py 中的 INSTALLED_APPS 中确保您的 DATABASES['default'] 在 settings.py 中设置正确 该应用程序有一个 models.py (即使您不使用,至少需要一个空的在那里)


如果您使用“测试”文件夹,请记住将“_init _.py”文件放在那里。
A
Aleksandr Aksarin

使用此语法

python manage.py test

而不是 ./manage.py test 为我解决了这个问题。


S
SGaist

请参阅https://docs.djangoproject.com/en/1.11/topics/testing/overview/

测试未运行的最常见原因是您的设置不正确,并且您的模块不在 INSTALLED_APPS 中。

我们使用 django.test.TestCase 而不是 unittest.TestCase。它捆绑了 Client

https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.TestCase


谢谢,我已经翻页了,我的模块在 INSTALLED_APPS
测试类中的测试方法必须以关键字 test 开头才能运行。
M
Matin Onegh

我遇到了同样的问题,原来我将 __init__ 保存为 python 文件,但它没有将 .py 放在其名称的末尾。我在文件名的末尾添加了 .py。后来就好了

(换句话说,我创建了 __init__ 而不是 __init__.py


R
Rick Graves

在同一个文件中,我有两个具有相同名称的测试类,当然这会阻止所有测试运行。


Q
Qarj

我在我的测试类中创建了一个名为 run 的方法,结果证明这是一个非常糟糕的主意。 Python 可以看到我想运行测试,但无法运行。这个问题略有不同,但结果是一样的——它看起来好像找不到测试。

请注意,显示了以下消息: You want to run the existing test: <unittest.runner.TextTestResult run=0 errors=0 failures=0>


C
Chris

运行 --help 并查找详细信息。把它调到最大。

我运行 manage.py test --verbose 并在顶部找到了这个调试输出:

>nosetests --with-spec --spec-color --verbose --verbosity=2

哦,看!我已经安装并忘记了 nosetests。它说--verbosity=2。我发现 3 是最大值,并且用 3 运行它我发现了很多这些:

nose.selector: INFO: /media/sf_C_DRIVE/Users/me/git/django/app/tests/test_processors.py is executable; skipped

这给了我正确的提示。确实存在设置 x 位的文件的问题。然而,由于它已经运行了一些测试,我被抛离了轨道——尽管它明确表示会跳过它们。更改位是不可能的,因为我在 VM 中运行测试,共享我的 Windows NTFS 磁盘。所以添加 --exe 修复了它。


O
O-9

有同样的问题,这是因为我的文件名中有一个 - 字符。我的文件名是 route-tests.py 并将其更改为 route_tests.py


E
Eric Darchis

如果您在升级到 Django 3 后遇到此错误,可能是因为 -k 参数的含义从:

-k, --keepdb          Preserves the test DB between runs.

-k TEST_NAME_PATTERNS   Only run test methods and classes that match the pattern or substring. Can be used multiple times. Same as unittest -k option.

因此,只需将 -k 替换为 --keepdb 即可使其再次工作。


m
marc_s

Django 引擎搜索带有 test_ 前缀的文件和文件夹(在 tests 文件夹内)。就我而言,这是一个简单的解决方案。

因此,请务必签出以它开头的文件/文件夹名称。


D
Doha Simon

我有同样的问题,它是由项目根目录的 init.py 引起的 - 删除它,所有测试再次运行良好。


W
Winston

这已经晚了。但您可以在导入模型前简单地添加您的应用名称。喜欢

    from myapp.models import something

这对我有用。


P
Pooya Rahmanian

在 Django 中,测试类中的方法必须以“test”关键字开头。例如 test_is_true()。像 is_true() 这样的方法名称将不会执行。


建议已经在这里回答了=> stackoverflow.com/a/53769987/5472004

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅