python-Nose在Django中未发现包级测试

python-Nose在Django中未发现包级测试,python,django,nose,django-nose,Python,Django,Nose,Django Nose,我正在为我的Django应用程序设置一个目录结构,以分离功能测试和单元测试。我正在使用nose作为Django项目的测试运行程序 在Django项目的根目录下,我有一个名为“tests”的文件夹,其结构如下: tests ├── __init__.py ├── functional │ ├── __init__.py └── unit ├── __init__.py ├── data.py ├── tests.py 如果我只想运行单元测试,我是否应该不能从项目根目录

我正在为我的Django应用程序设置一个目录结构,以分离功能测试和单元测试。我正在使用nose作为Django项目的测试运行程序

在Django项目的根目录下,我有一个名为“tests”的文件夹,其结构如下:

tests
├── __init__.py
├── functional
│   ├── __init__.py
└── unit
    ├── __init__.py
    ├── data.py
    ├── tests.py
如果我只想运行单元测试,我是否应该不能从项目根目录使用以下内容:

$ nosetests tests.unit

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

OK
如您所见,这在tests.py文件中找不到测试

但是,当我使用目录结构运行时,会发现测试应该是:

$ nosetests tests/unit/
E
# .. Some errors I expected because settings are not initialized when called this way
-----------------
Ran 1 test in 0.001s

FAILED (errors=1)
我错过了什么?我的主要问题是,我在
tests.unit.\uuuu init\uuuu.py
中有一个
setup
函数,应该调用该函数为即将到来的测试在测试数据库中创建数据


谢谢

这一切都取决于
测试/unit/\uuuu init\uuuuu.py中的代码类型

from tests.unit.tests import *
当你说

nosetests tests.unit
您指向的是
unit/\uuuu init\uuuu.py
而不是目录
unit/
,因此,如果在
\uuuu init\uuuuuuu.py
模块中没有测试,则不会运行任何测试。因此,当您说您使用了目录路径,然后您的测试开始工作时,这是可以理解的

你提到

我错过了什么?我的主要问题是,我有一个设置功能 tests.unit.init.py,在中创建数据时应调用它 即将进行的测试的测试数据库

虽然您在
\uuuu init\uuuuuuuuuuuuuuuuuupy
中有一个设置函数,但您可能从未将测试函数导入到
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy

from tests.unit.tests import *
解决这个问题的一个快速方法是在
\uuuu init\uuuuuuuupy

from tests.unit.tests import *

也就是说,在
\uuuu init\uuuu.py
中放入任何代码都不是很明智,如果您有返回某种配置数据的代码,我建议您创建一个新的库模块,其中包含将配置数据返回到测试的函数

,您是否需要在第一次初始化中包含导入单元?(只是把它扔出去)@sihrc不这么认为,因为我可以使用python命令行
python-c“import tests.unit”
从同一目录导入
unit.tests
模块,您是否尝试在详细模式下运行nose?尝试使用
-v
-vv
查看他们是否给出了关于测试发现的任何提示。感谢您的回答!我对nose的发现功能的理解是,它将适用于所有匹配模式的模块。所以当我把它指向tests.unit时,它会找到tests.py,以及里面的所有测试函数。但是现在我添加了
from.tests import*
,这似乎起到了作用。没有办法让nose自动找到测试,而不是手动导入它们吗?是的,如果您想在目录中自动找到所有测试,只需执行
nosetests unit/
。正如我提到的,当你说
nosetests tests.unit
时,你告诉nose在一个特定的模块中查找所有的测试。如果那个模块没有测试,那么你就不走运了。我没有使用太多的模块表示法,所以我不能说得更深入。也许可以查看上的源代码以了解更多信息