22

I have project with the following directory structure:

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

I want to run all tests with one command. If I do python -m unittest discover, no tests are executed.

I found this question that suggest adding a __init__.py file to make packages out of the unit and integration folders. The solution works, and all tests are running this way.

But since I'm using python3 and __init__.py files are not required with implicit namespace packages, I was wondering if there was a way to make this works without those __init__.py files.

Timothée Jeannin
  • 9,022
  • 2
  • 53
  • 62
  • 1
    seems related [bug#17457](https://bugs.python.org/issue17457) which was fixed in python 3.4. which version of python you are using? – skadya Dec 29 '18 at 07:03

3 Answers3

8

I looked into it, and think its most likely a bug.

So I created a python bug report and a PR which fixes the issue for me.

Clone it and see if it works for you as well, with the fix the best way of running discover was python -m unittest discover -s tests. Otherwise it will look in for example virtual environments that are below the top dir.

SimonF
  • 1,795
  • 8
  • 22
0

Note that namespace package is regular package. You must not expect namespace package is treated same to regular package.

Read this article too. https://dev.to/methane/don-t-omit-init-py-3hga

methane
  • 439
  • 3
  • 5
  • 11
-2

Use pytest. It does discover tests in folders.

In your case you just need to install in via pip (pip install pytest) and then run in your root folder pytest tests.

Aleksandr Borisov
  • 2,042
  • 1
  • 11
  • 14