Я пытаюсь понять, как заставить python setup.py test
запускать эквивалент python -m unittest discover
. Я не хочу использовать сценарий run_tests.py и не хочу использовать какие-либо внешние инструменты тестирования (например, nose
или py.test
). Ничего страшного, если решение работает только на python 2.7.
В setup.py
, я думаю, мне нужно что-то добавить в поля test_suite
и/или test_loader
в конфиге, но я не могу найти комбинацию, которая работает правильно:
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
Возможно ли это, используя только unittest
, встроенный в Python 2.7?
К вашему сведению, структура моего проекта выглядит так:
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
Обновление: это возможно с unittest2
, но я хочу найти что-то эквивалентное, используя только unittest
Из https://pypi.python.org/pypi/unittest2
unittest2 включает в себя очень простой сборщик тестов, совместимый с setuptools. Укажите test_suite = 'unittest2.collector' в файле setup.py. Это запускает обнаружение тестов с параметрами по умолчанию из каталога, содержащего setup.py, поэтому, возможно, это наиболее полезно в качестве примера (см. unittest2/collector.py).
На данный момент я просто использую скрипт под названием run_tests.py
, но я надеюсь, что смогу избавиться от этого, перейдя к решению, которое использует только python setup.py test
.
Вот run_tests.py
, который я надеюсь удалить:
import unittest
if __name__ == '__main__':
# use the default shared TestLoader instance
test_loader = unittest.defaultTestLoader
# use the basic test runner that outputs to sys.stderr
test_runner = unittest.TextTestRunner()
# automatically discover all tests in the current dir of the form test*.py
# NOTE: only works for python 2.7 and later
test_suite = test_loader.discover('.')
# run the test suite
test_runner.run(test_suite)