`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" - успех!

Другие вопросы по тегам