`python -m unittest discovery` не обнаруживает тестов
Python Unittest Discover не находит мои тесты!
Я использовал нос, чтобы обнаружить мои юнит-тесты, и он работает нормально. На верхнем уровне моего проекта, если я запускаю 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
, вероятно, будет хорошим способом продвижения вперед.
Ответ 2
Как кто-то относительно новичок в Python, соглашение об именах в документации подразумевало обратное. Комментарий Бена был очень полезен: шаблон обнаружения по умолчанию ищет тестовые модули -m с префиксом "test"
Я думал, что интроспекция будет просто искать имена классов и не требовать особого соглашения об именах файлов.
Вот что говорят документы: https://docs.python.org/3/library/unittest.html python -m unittest find -s project_directory -p "_test.py" Я не смог заставить это работать, но изменив мои имена файлов на "test_.py" - успех!