Я пытаюсь выяснить, как получить python setup.py test
для запуска эквивалента python -m unittest discover
. Я не хочу использовать run_tests.py script, и я не хочу использовать внешние инструменты тестирования (например, nose
или py.test
). Это нормально, если решение работает только на python 2.7.
В setup.py
, я думаю, мне нужно добавить что-то в поля test_suite
и/или test_loader
в config, но я не могу найти подходящую комбинацию:
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
Возможно ли это, используя только unittest
, встроенный в python 2.7?
FYI, моя структура проекта выглядит следующим образом:
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).
В настоящее время я просто использую script, называемый 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)