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