Подтвердить что ты не робот

`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.

4b9b3361

Ответ 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" - успех!