This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author adamchainz
Recipients adamchainz
Date 2021-11-22.10:28:02
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1637576882.84.0.616248029554.issue45864@roundup.psfhosted.org>
In-reply-to
Content
unittest's test discovery does not descend into directories without `__init__.py`. This avoids discovering test modules that are otherwise valid and importable, after PEP 420.

I've seen this more than once where there were valid looking test files not being discovered, and they bit rot. The tests had been run individually when created but never again.

(I created [flake8-no-pep420](https://pypi.org/project/flake8-no-pep420/) to avoid this problem on my projects.)

For example, take this directory structure:

```
$ tree
.
└── tests
    └── test_thing.py

1 directory, 1 file

$ cat tests/test_thing.py
1/0
```

It's valid to import the naughty file, which crashes:

```
$ python -c 'import tests.test_thing'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/.../tests/test_thing.py", line 1, in <module>
    1/0
ZeroDivisionError: division by zero
```

But unittest does not discover it:

```
$ python -m unittest

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
```

But, after creating an empty `__init__.py`, the tests doth fail:

```
$ touch tests/__init__.py

$ python -m unittest
E
======================================================================
ERROR: tests.test_thing (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests.test_thing
Traceback (most recent call last):
  File "/.../unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/.../unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/.../tests/test_thing.py", line 1, in <module>
    1/0
ZeroDivisionError: division by zero


----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)
```
History
Date User Action Args
2021-11-22 10:28:02adamchainzsetrecipients: + adamchainz
2021-11-22 10:28:02adamchainzsetmessageid: <1637576882.84.0.616248029554.issue45864@roundup.psfhosted.org>
2021-11-22 10:28:02adamchainzlinkissue45864 messages
2021-11-22 10:28:02adamchainzcreate