2

我正在为我的 Django 应用程序设置一个目录结构来分离功能测试和单元测试。我使用鼻子作为我的 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应该被调用来为即将到来的测试在测试数据库中创建数据。

谢谢

4

1 回答 1

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,如果您有返回某种配置数据的代码,我建议您创建一个新的库模块,其中包含将配置数据返回到您的测试的函数

于 2013-08-10T08:48:51.033 回答