使用python3并且没有__init__.py文件进行递归unittest发现

Tim*_*nin 16 python unit-testing python-3.x python-unittest

我有以下目录结构的项目:

.
??? requirements.txt
??? main.py
??? tests
    ??? unit
    ?   ??? test_thing1.py
    ?   ??? test_thing2.py
    ??? integration
        ??? test_integration_thing1.py
        ??? test_integration_thing2.py
Run Code Online (Sandbox Code Playgroud)

我想用一个命令运行所有测试.如果我这样做python -m unittest discover,就不会执行任何测试.

我发现这个问题建议添加一个__init__.py文件来制作包unitintegration文件夹.解决方案有效,所有测试都以这种方式运行.

但是因为我使用python3并且隐式命名空间包__init__.py不需要文件,所以我想知道是否有一种方法可以在没有这些文件的情况下使其工作.__init__.py

Sim*_*onF 6

我调查了一下,并认为它很可能是一个错误.

所以我创建了一个python错误报告PR来解决这个问题.

克隆它,看它是否也适合你,修复了运行发现的最佳方式python -m unittest discover -s tests.否则,它将查看例如位于顶部目录下方的虚拟环境.

  • [原始错误报告](https://bugs.python.org/issue23882) 发布 5 年后,“unittest”仍然损坏。:( (3认同)

Ale*_*sov -2

使用pytest。它确实会发现文件夹中的测试。

在你的情况下,你只需要通过 pip() 安装pip install pytest,然后在你的根文件夹中运行pytest tests