如何运行试用版以便在目录中执行所有测试?如果我单独对每个文件运行试验,我的所有单元测试都会通过,但如果我尝试类似......
trial test/
在测试目录上的,它给了我一个“PASSED
”,以及以下消息......
UserWarning: (for module __init__) not in path importer cache (PEP 302 violation
- check your local configuration).
而不是实际运行目录中的所有测试。
答案 0 :(得分: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目录,混淆“我加载代码的地方”和“当前目录”,并且通常会混淆各种难以解决的事情。
所以,使用您选择的路径管理工具设置PYTHONPATH
和PATH
:Combinator,setup.py develop,virtualenv - 或只是转储垃圾进入你的~/.bashrc
- 然后从一个临时位置运行trial
,在一个名字独特的顶级Python包上运行,一切都应该正常工作。