python - 没有发现Django中的包级别测试

时间:2013-08-09 15:50:57

标签: python django nose django-nose

我正在为我的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)

我错过了什么?我的主要问题是我在setup中有一个tests.unit.__init__.py函数,应该调用它来在测试数据库中为即将进行的测试创建数据。

由于

1 个答案:

答案 0 :(得分:3)

这完全取决于tests/unit/__init__.py

中的代码类型

当你说

nosetests tests.unit

您指向的是unit/__init__.py而不是目录unit/,因此如果您的__init__.py模块中没有测试,那么就不会运行任何内容。因此,当您说使用目录路径然后测试开始工作时,这是可以理解的。

你提到

  

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

虽然__init__.py中有设置功能,但您可能还没有将测试功能导入__init__.py

对此的一个快速解决方法是在__init__.py

中添加此行
from tests.unit.tests import *

那说在__init__.py中放任何代码真的不是很明智,如果你有代码返回某种配置数据我会建议创建一个新的库模块,其中包含将返回配置的函数测试数据