2011-09-26 40 views
3

如何运行试用版,以便它执行目录中的所有测试?我所有的单元测试都通过了,如果我对每个文件运行试验独立,但如果我尝试在测试目录类似...如何在目录中的所有测试中运行扭曲试验?

trial test/ 

,它给了我一个“PASSED”,和下面的消息...

UserWarning: (for module __init__) not in path importer cache (PEP 302 violation 
    - check your local configuration). 

而不是实际运行目录中的所有测试。

回答

5

首先:你不能打电话给你的顶级单元测试包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目录转储到您的源代码中,将“加载我的代码的位置”和“当前目录”混淆在一起,并且通常会混淆各种后续难以解决的事情。

因此,建立你的PYTHONPATHPATH使用您所选择的路径管理工具:Combinatorsetup.py developvirtualenv - 或者只是倾倒垃圾到您的~/.bashrc - 然后从一些临时位置运行trial,在一个唯一地命名顶级Python包,并且一切都应该正常工作。

+1

我最近很苦恼,只是想补充说,递归测试发现只适用于模块名称以'test_'开头。 –

相关问题