首先:你不能打电话给你的顶级单元测试包test
。这是Python的单元测试的名称,所以你将永远无法在已安装的配置中运行测试,并且根据你的python设置,你最终可能会导入python自己的测试,而不是你自己的测试。
第二:sys.path
是一个浩大而微妙的奥秘。
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包,并且一切都应该正常工作。
我最近很苦恼,只是想补充说,递归测试发现只适用于模块名称以'test_'开头。 –