如何在目录下运行所有的twisted trial测试?

3 投票
1 回答
2419 浏览
提问于 2025-04-17 03:08

我该怎么做才能让 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 目录,搞混“我从哪里加载代码”和“当前目录”,通常会让各种事情变得混乱,之后很难理清。

所以,使用你选择的路径管理工具来设置你的 PYTHONPATHPATH:比如 Combinatorsetup.py developvirtualenv,或者直接在你的 ~/.bashrc 中添加一些内容,然后在某个临时位置运行 trial,使用一个独特命名的顶层Python包,这样一切应该都能正常工作。

撰写回答