4

我正在为大型项目使用金字塔框架,我发现将所有测试都放在一个tests.py文件中很麻烦。所以我决定创建一个包含我的测试文件的目录。问题是,我不知道如何告诉金字塔从这个目录运行我的测试。

我正在使用python setup.py test -q.

但这当然不起作用,在我将测试移动到测试目录之后。该怎么做,让它发挥作用?

4

3 回答 3

5

首先,您需要通过在其中创建一个来确保tests它不仅仅是一个目录,而是一个 Python 包__init__.py

您还需要确保命名tests包中的模块test_something.py

大多数测试运行器,作为他们测试发现的一部分,寻找一个名为 的模块或包tests,该包中的模块以 开头,test_并期望测试方法(在TestCase子类上)的方法名称以 开头test_

unittest模块将测试运行器描述为:

测试运行器是一个组件,它协调测试的执行并向用户提供结果。运行程序可以使用图形界面、文本界面或返回特殊值来指示执行测试的结果。

有很多不同的测试框架,因此有很多测试运行器,大多数都unittest以某种方式扩展并寻找unittest.TestCase子类。他们可能会进行不同类型的测试发现,以不同的方式呈现结果或在运行测试时收集代码覆盖率。

至于相对进口:你真的应该尽量避免这些。它们使移动代码变得更加困难(正如您刚刚注意到的那样)并降低了导入的可读性(从哪里导入什么代码?)。只需使用from myproject.views import my_view- 事情在哪里就更清楚了

于 2012-08-27T16:45:54.350 回答
1

我终于找到了方法。我刚刚创建了名为 tests 的目录,将我的测试放入其中并创建了空文件__init__.py。我需要修复相对导入,否则会出现奇怪的错误,例如:

AttributeError: 'module' object has no attribute 'tests'

我真的不明白发生了什么,以及nosetest这里的作用是什么,但它确实有效。

如果有人能够更深入地解释这个问题,那就太好了。

于 2012-08-27T16:31:05.687 回答
0

尝试使用nose
http://nose.readthedocs.org/en/latest/
如果您的所有测试文件都以“Test”开头,nosetests则应将它们全部提取并运行它们。

于 2012-08-27T16:25:46.757 回答