【问题标题】:How do I run twisted trial on all tests in a directory?如何对目录中的所有测试运行扭曲试验?
【发布时间】:2026-01-06 08:10:01
【问题描述】:

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

trial test/

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

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

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

【问题讨论】:

    标签: python twisted trial


    【解决方案1】:

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

    第二:sys.path 是一个巨大而微妙的谜。

    trial 支持在文件和目录上运行作为快速入门的 hack,但使用路径名永远不会完全正确。正确的做法是传递一个 module(或包)名称,它可以作为 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 目录,混淆“我从中加载代码的位置”和“当前目录”,并且通常会混淆各种事情,以后可能难以解开。

    所以,使用您选择的路径管理工具设置您的 PYTHONPATHPATHCombinatorsetup.py developvirtualenv – 或者只是将垃圾倒入您的 ~/.bashrc – 然后运行trial 从某个临时位置,在一个唯一命名的* Python 包上,一切都应该正常工作。

    【讨论】:

    • 我最近一直在努力解决这个问题,只是想补充一点,递归测试发现只有在模块名称以 test_ 开头时才有效。