Python unittest и открытие - PullRequest
       23

Python unittest и открытие

34 голосов
/ 21 июля 2010

У меня есть каталоги, которые содержат файлы, названные как: test_foo.py

Каждый файл является тестовым.

Я бы хотел

1) Запустите все тесты в каталоге из командной строки. Я использую unittest2, так как мы работаем с Python 2.5.1. Из одного из этих каталогов я попытался набрать это в командной строке:

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

и несколько разных вариантов. Я не получаю ошибки, но ничего не происходит. Я ожидал, что все тесты во всех тестовых случаях в этом каталоге запустятся и получат результаты.

2) Я также попытался создать скрипт в каталоге, где я сделал это:

loader = unittest2.TestLoader()
t = loader.discover('.')

Если я распечатываю переменную t, я вижу свои тестовые случаи, но из документов я не могу понять, что делать с объектом загрузчика, когда он у меня есть.

Ответы [ 3 ]

51 голосов
/ 13 июля 2011

Я столкнулся с той же проблемой при запуске python -m unittest discover. Вот хороший контрольный список для проверки ваших настроек. Nose более гибок с разрешенными конфигурациями, но не обязательно лучше.

  1. Убедитесь, что все файлы / каталоги начинаются с test. не используйте test-something.py, поскольку это недопустимое имя модуля Python. Используйте test_something.py.

  2. Если вы помещаете свои тесты в подкаталог (например, test/), убедитесь, что вы создали файл test/__init__.py, чтобы python рассматривал каталог как пакет.

  3. Все определения тестов классов должны быть расширены unittest.TestCase. Например

    class DataFormatTests(unittest.TestCase)
    
47 голосов
/ 01 декабря 2011

Как только вы обнаружили тесты, вы можете запускать их с помощью тестового прогона.

import unittest2
loader = unittest2.TestLoader()
tests = loader.discover('.')
testRunner = unittest2.runner.TextTestRunner()
testRunner.run(tests)

Выполнение вышеуказанного кода распечатает результаты теста в стандартном формате.

23 голосов
/ 21 июля 2010

Дайте, как вы пытаетесь использовать unittest2 из командной строки на Python < 2.7, я думаю, вы, возможно, пропустили заметку на unittest2 странице PyPI :

Примечание

Использование командной строки

В Python 2.7 вы вызываете функции командной строки unittest (включая тестовое обнаружение) с помощью python -m unittest <args>.Так как unittest является пакетом, а возможность вызывать пакеты с python -m ... является новой в Python 2.7, мы не можем сделать это для unittest2.

Вместо unittest2 поставляется со скриптом unit2.Использование командной строки:

unit2 discover unit2 -v test_module

Существует также копия этого скрипта с именем unit2.py, полезная для Windows, которая использует расширения файлов, а не строки shebang, чтобы определить, с какой программой выполнять файлы.Оба эти сценария устанавливаются distutils.

Пробовали ли вы сценарий unit2, который рекомендуется в этой заметке в качестве альтернативы для старых Pythons функции "запускать пакет как основной сценарий" Python 2.7?Возможно, его источники также могут быть полезны, чтобы выяснить, как именно выявлять и запускать тесты из вашего собственного кода, если вы этого хотите.

...