如何在目录下运行所有的twisted trial测试?
我该怎么做才能让 trial 运行一个目录下的所有测试呢?我每个单独的测试文件运行时都能通过,但如果我试着在测试目录上运行...
trial test/
它只给我一个 "PASSED
" 的结果,还有下面这个信息...
UserWarning: (for module __init__) not in path importer cache (PEP 302 violation
- check your local configuration).
而不是实际运行目录里的所有测试。
1 个回答
5
首先,你不能把你的顶层单元测试包命名为 test
。因为这个名字已经被Python的单元测试使用了,所以你在安装后的配置中永远无法运行你的测试。而且根据你的Python设置,可能会导入Python自己的测试,而不是你的测试。
其次,sys.path
是一个复杂而微妙的东西。
trial
支持在文件和目录上运行,作为一种快速入门的方式,但它在使用路径名称时可能永远无法完全正确。正确的做法是给 trial
传递一个 模块(或包)的名称,这样它就可以作为Python模块导入并进行检查。
所以如果你的目录结构是这样的:
~/Projects/MyProject/
~/Projects/MyProject/myproject/
~/Projects/MyProject/myproject/__init__.py
~/Projects/MyProject/myproject/stuff.py
~/Projects/MyProject/myproject/test/
~/Projects/MyProject/myproject/test/__init__.py
~/Projects/MyProject/myproject/test/test_stuff.py
那么你应该这样运行你的测试:
PYTHONPATH=$HOME/Projects/MyProject (cd /tmp; trial myproject.test)
换句话说,不要在你项目的目录中运行测试;这样会在你的源代码中到处生成 _trial_temp 目录,搞混“我从哪里加载代码”和“当前目录”,通常会让各种事情变得混乱,之后很难理清。
所以,使用你选择的路径管理工具来设置你的 PYTHONPATH
和 PATH
:比如 Combinator、setup.py develop、virtualenv,或者直接在你的 ~/.bashrc
中添加一些内容,然后在某个临时位置运行 trial
,使用一个独特命名的顶层Python包,这样一切应该都能正常工作。