Как пропустить файл test_utility при выполнении Python unittest?

У меня есть пакет утилит, и я включаю в него тесты для некоторых утилит. Однако, в одной из директорий есть куча многократно используемых классов, специфичных для django TestCase, и она продолжает запускаться и терпеть неудачу, когда я запускаю:

python -m unittest

Имя файла - testutils.py, он предназначен для импорта и использования другими приложениями Django, а не для тестирования. Есть ли настройки или файл пропуска, где я могу сказать моему пакету не смотреть на этот файл при запуске тестов?

unittest по умолчанию проверяет на наличие тестов файлы, соответствующие следующему глобусу: test*.py. Как вы видите, testutils.py соответствует этому шаблону и поэтому всегда проверяется на наличие тестов - даже если они предназначены только для заглушек.

Вам нужно либо переименовать testutils.py во что-то, что не соответствует этому шаблону, либо изменить шаблон glob, который unittest использует для обнаружения тестовых файлов. В качестве примера, вы можете назвать все свои тестовые файлы как test_*.py (например, test_foo.py) и затем запустить свои тесты как:

python -m unittest discover -p 'test_*.py'

Подчеркивание в шаблоне будет соответствовать таким вещам, как test_foo.py, но не позволит ему соответствовать testutils.py.

Структура файла может выглядеть следующим образом:

./main.py
./util.py
./tests/util.py
./tests/test_main.py
./tests/test_util.py

Все файлы тестов, независимо от того, содержат ли они тесты или утилитарные функции и классы, содержатся в каталоге tests/. Таким образом, мы знаем, что tests/util.py содержит утилиты для тестов, а не является частью кода основного приложения. И что test_util.py - это файл, который используется для тестирования кода в ./util.py.

Побочная заметка

util - не очень хороший дескриптор для модуля или файла. В основном он означает "хлам, для которого я не могу придумать хорошее название". Из краткого описания ваших тестов, возможно, подойдет что-то вроде django_test_harness.

Вернуться на верх