如何让 Pycharm 从测试文件夹递归运行所有 python 单元测试

Mar*_*sle 8 python unit-testing pycharm

我来自 Java 背景,所以我将我的单元测试组织成独立的并行测试层次结构,以反映我的主项目的结构。我使用 PyCharm 代替 Intellij 或 Eclipse。在这两个 I IDE 中,我可以选择任何被测包并在此命名空间下递归运行所有单元测试。

测试结构

+ tests
    + billing
        +  supplier
            + ClassName_tests.py - file
                - TestClassName  - class
                    - test_one() - functions
                    - test_two() - functions
    + config
        ...
    + invoicing
        ...
Run Code Online (Sandbox Code Playgroud)

这可以用 Python 和/或 PyCharm 实现吗?目前我需要单独运行每个命名空间/模块的测试我是否必须在 PyCharm 或 Python 中定义一些东西。

我已经阅读并尝试了这个设置,但它运行了所选文件夹中的所有测试,而不是递归的。 如何强制 Pycharm 运行所有单元测试?

MaV*_*Art 9

只是在这里发布一个答案,因为我被困在这个问题上有一段时间了......这里的所有其他答案都围绕着这个主题跳舞,但你的案例的解决方案相对简单:

当 Pycharm 在目录中发现测试时,它将子目录视为在其中发现测试的模块。

__init__.py这意味着如果您希望这些文件夹可供发现,则需要包含一个文件。

换句话说:

你的例子:

+ tests
    + billing
        +  supplier
            + ClassName_tests.py - file
           
    + ... (omitted the rest for brevity)
Run Code Online (Sandbox Code Playgroud)

应该变成:

+ tests
    + billing
        - __init__.py
        +  supplier
            - __init__.py
            - ClassName_tests.py - file
           
    + ...
Run Code Online (Sandbox Code Playgroud)

之后,右键单击“tests”目录并运行其中的所有测试应该运行所有测试,包括子文件夹中的测试,但仅限于可以视为模块的子文件夹(例如包含文件__init__.py


小智 -3

您可以使用

\n\n
python -m unittest discover -s project_directory -p "*_test.py"\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
python -m unittest discover project_directory "*_test.py"\n
Run Code Online (Sandbox Code Playgroud)\n\n

详细信息参见单元测试文档\xe2\x80\x9cTest Discovery\xe2\x80\x9d章节

\n

  • 这不是 PyCharm 的正确答案。您不应该在终端中运行测试! (4认同)