我正在为大型项目使用金字塔框架,我发现将所有测试都放在一个tests.py
文件中很麻烦。所以我决定创建一个包含我的测试文件的目录。问题是,我不知道如何告诉金字塔从这个目录运行我的测试。
我正在使用python setup.py test -q
.
但这当然不起作用,在我将测试移动到测试目录之后。该怎么做,让它发挥作用?
首先,您需要通过在其中创建一个来确保tests
它不仅仅是一个目录,而是一个 Python 包__init__.py
。
您还需要确保命名tests
包中的模块test_something.py
。
大多数测试运行器,作为他们测试发现的一部分,寻找一个名为 的模块或包tests
,该包中的模块以 开头,test_
并期望测试方法(在TestCase
子类上)的方法名称以 开头test_
。
unittest模块将测试运行器描述为:
测试运行器是一个组件,它协调测试的执行并向用户提供结果。运行程序可以使用图形界面、文本界面或返回特殊值来指示执行测试的结果。
有很多不同的测试框架,因此有很多测试运行器,大多数都unittest
以某种方式扩展并寻找unittest.TestCase
子类。他们可能会进行不同类型的测试发现,以不同的方式呈现结果或在运行测试时收集代码覆盖率。
至于相对进口:你真的应该尽量避免这些。它们使移动代码变得更加困难(正如您刚刚注意到的那样)并降低了导入的可读性(从哪里导入什么代码?)。只需使用from myproject.views import my_view
- 事情在哪里就更清楚了
我终于找到了方法。我刚刚创建了名为 tests 的目录,将我的测试放入其中并创建了空文件__init__.py
。我需要修复相对导入,否则会出现奇怪的错误,例如:
AttributeError: 'module' object has no attribute 'tests'
我真的不明白发生了什么,以及nosetest
这里的作用是什么,但它确实有效。
如果有人能够更深入地解释这个问题,那就太好了。
尝试使用nose
http://nose.readthedocs.org/en/latest/
如果您的所有测试文件都以“Test”开头,nosetests
则应将它们全部提取并运行它们。