3

如何运行 Trial 以便它执行目录中的所有测试?如果我单独对每个文件运行试验,我所有的单元测试都会通过,但是如果我尝试类似...

trial test/

在测试目录上,它给了我一个“ PASSED”,以及以下消息......

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

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

4

1 回答 1

5

首先:你不能调用你的顶级单元测试包test。这是 Python 单元测试的名称,因此您将永远无法在已安装的配置中运行测试,并且根据您的 Python 设置方式,您最终可能会导入 Python 自己的测试而不是您自己的测试。

第二:sys.path是一个浩瀚而微妙的奥秘。

trial支持在文件和目录上运行作为快速入门 hack,但使用路径名永远不会完全正确。正确的做法是传递一个模块(或包)名称,它可以作为 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 包上,一切都应该正常工作。

于 2011-09-26T21:41:24.270 回答