unittest: TestLoader.discover() returns tests in package/__init__.py
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 36k
- Métriques de merge des PR
- Métriques de PR en attente
Description
According to the docs:
TestLoader.discover(start_dir, pattern='test*.py', top_level_dir=None)
Find all the test modules by recursing into subdirectories from the specified start directory, and return a TestSuite object containing them. Only test files that match pattern will be loaded.
However, tests are also loaded from __init__.py. This does not match the pattern test*.py.
To reproduce, create package/__init__.py with the following contents:
import unittest
class Test(unittest.TestCase):
def test(self):
self.fail('')
Then run python3 -m unittest. The expected output is Ran 0 tests. But it actually is:
F
======================================================================
FAIL: test (package.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "package/__init__.py", line 5, in test
self.fail('')
AssertionError
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)
So the test was discovered, despite being located in a file that does not match the pattern test*.py.
The same happens when the TestCase subclass is imported in any __init__.py file.
I tested the above with Python 3.9.2. It does not happen for me with Python 2.7.18.
Linked PRs
- gh-100487
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez le problème avec un package/init.py contenant le TestCase indiqué et exécutez python3 -m unittest ; commencez au point d’entrée TestLoader.discover(). C’est terminé lorsque les tests dans les fichiers qui ne correspondent pas au motif test*.py, y compris package/init.py, ne sont pas détectés ; consultez la PR liée gh-100487 pour voir le travail déjà en cours.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- testing-qa
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 25/100