Python unittest и обнаружение
У меня есть каталоги, в которых есть файлы с именами:
test_foo.py
Каждый файл является тестовым.
Я хотел бы
1) Запустите все тесты в каталоге из командной строки. Я использую unittest2
, так как мы запускаем Python 2.5.1. Из одного из этих каталогов я попытался ввести его в командной строке:
python -m unittest2 discover -p 'test_*.py'
и несколько разных вариантов. Я не получаю ошибки, но ничего не происходит. Я ожидал, что все тесты во всех тестовых случаях в этом каталоге будут запущены и получат результаты.
2) Я также попробовал иметь script в каталоге, где я это сделал:
loader = unittest2.TestLoader()
t = loader.discover('.')
Если я печатаю переменную t
, я могу видеть свои тестовые примеры, но из документов я не могу понять, что делать с объектом-загрузчиком, когда я это сделаю.
Ответы
Ответ 1
Как только вы открыли тесты, вы можете запустить их с помощью тестового бегуна.
import unittest2
loader = unittest2.TestLoader()
tests = loader.discover('.')
testRunner = unittest2.runner.TextTestRunner()
testRunner.run(tests)
Запуск вышеуказанного кода распечатает результаты теста до стандартного.
Ответ 2
Я столкнулся с той же проблемой при запуске python -m unittest discover
. Вот хороший контрольный список для проверки вашей настройки. Nose
является более гибким с разрешенными конфигурациями, но не обязательно лучше.
-
Убедитесь, что все файлы/директории начинаются с test
. Не используйте не test-something.py
, так как это не допустимое имя модуля python. Используйте test_something.py
.
-
Если вы помещаете свои тесты в подкаталог (например, test/
), убедитесь, что вы создали файл test/__init__.py
, поэтому python будет обрабатывать каталог как пакет.
-
Все определения тестовых случаев класса должны быть расширены unittest.TestCase
. Например
class DataFormatTests(unittest.TestCase)
Ответ 3
Дайте, как вы пытаетесь использовать unittest2
из командной строки на Python < 2.7
, я думаю, вы, возможно, пропустили заметку на unittest2
страница PyPI:
Примечание
Использование командной строки
В Python 2.7 вы вызываете unittest функции командной строки (включая тест открыть) с помощью python -m unittest
<args>
. Поскольку unittest - это пакет, и возможность вызова пакетов с помощью python -m ...
является новым в Python 2.7, мы не может сделать это для unittest2.
Вместо unittest2 поставляется с scriptмодуль 2. Использование командной строки:
unit2 discover unit2 -v test_module
Существует также копия этого scriptназываемый unit2.py
, полезный для Windows который использует расширения файлов, а не shebang, чтобы определить, что программа для выполнения файлов. Оба эти скрипты устанавливаются Distutils.
Вы пробовали unit2
script, который рекомендует эта нота в качестве альтернативы для старых Pythons для "запускать пакет как главную функцию script" Python 2.7? Возможно, его источники также могут быть полезны, чтобы точно узнать, как обнаружить и запустить тесты из вашего собственного кода, если это то, что вы предпочли бы сделать.