`python -m unittest Discover` не обнаруживает тесты
Тест юнитов Python не находит мои тесты!
Я использовал нос, чтобы обнаружить мои юнит-тесты, и он работает нормально. С верхнего уровня моего проекта, если я бегу nosetests
Я получил:
Ran 31 tests in 0.390s
Теперь, когда у Python 2.7 unittest есть обнаружение, я попытался использовать
python -m unittest discover
но я получаю
Ran 0 tests in 0.000s
Моя структура каталогов:
myproj/
reporter/
__init__.py
report.py
[other app modules]
tests/
__init__.py
test-report.py
[other test modules]
У вас есть идеи, почему алгоритм обнаружения unittest не может найти тесты?
Я использую Python 2.7.1 и нос 1.0.0 на Windows 7.
1 ответ
Поведение является преднамеренным, но документация может прояснить это. Если вы посмотрите на первый абзац в разделе обнаружения тестов, он говорит:
Чтобы тесты проекта были совместимы с обнаружением тестов, все они должны быть импортированы из каталога верхнего уровня проекта (иными словами, все они должны быть в пакетах Python).
Следствием этого является то, что имена файлов также должны быть действительными именами модулей Python. test-report.py
не проходит этот тест, так как test-report
не является допустимым идентификатором Python.
Ошибка документации, предполагающая, что это должно быть явно упомянуто в документации для -p
Вариант шаблона, вероятно, будет хорошим способом продвижения вперед.
У меня была эта проблема, потому что некоторые каталоги в проекте отсутствовали __init__.py
. Я думал, что они мне не нужны в Python 3.7.
Просто добавь __init__.py
в каждый каталог иpython3 -m unittest
найдет тесты автоматически.
Как кто-то относительно новичок в Python, соглашение об именах в документации подразумевало обратное. Комментарий Бена был очень полезен: шаблон обнаружения по умолчанию ищет тестовые модули с префиксом "test"
Я думал, что интроспекция будет просто искать имена классов и не требовать особого соглашения об именах файлов.
Вот что говорят документы: https://docs.python.org/3/library/unittest.html python -m unittest find -s project_directory -p "_test.py" Я не смог заставить это работать, но изменение имен моих файлов на "test_.py" - успех!