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

时间:2017-10-27 13:30:32

标签: python python-3.x unit-testing python-unittest

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

.
├── requirements.txt
├── main.py
├── tests
    ├── unit
    │   └── test_thing1.py
    │   └── test_thing2.py
    └── integration
        └── test_integration_thing1.py
        └── test_integration_thing2.py

我想用一个命令运行所有测试。如果我python -m unittest discover,则不执行任何测试。

我发现this question建议添加__init__.py文件,以便从unitintegration文件夹中创建包。解决方案有效,所有测试都以这种方式运行。

但由于我implicit namespace packages不需要使用python3和__init__.py文件,因此我想知道是否有办法在没有__init__.py文件的情况下使其工作。

3 个答案:

答案 0 :(得分:6)

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

因此,我创建了一个python bug report和一个PR,可以为我解决此问题。

克隆它并查看它是否也对您有用,通过修复,运行发现的最佳方法是python -m unittest discover -s tests。否则,它将查找顶部目录下的虚拟环境。

答案 1 :(得分:0)

请注意,名称空间包是常规包。 您不能期望将名称空间包与常规包一样对待。

也请阅读此文章。 https://dev.to/methane/don-t-omit-init-py-3hga

答案 2 :(得分:-1)

使用pytest。它确实在文件夹中发现了测试。

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