Я намагаюся зрозуміти, як 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?
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).
На даний момент я просто використовую скрипт, який називається 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)