Próbuję dowiedzieć się, jak python setup.py test
uruchomić odpowiednik python -m unittest discover
. Nie chcę używać skryptu run_tests.py i nie chcę używać żadnych zewnętrznych narzędzi testowych (takich jak nose
lub py.test
). W porządku, jeśli rozwiązanie działa tylko w Pythonie 2.7.
W setup.py
, myślę, że trzeba dodać coś do test_suite
i / lub test_loader
pól w config, ale nie wydaje się znaleźć kombinację, która działa prawidłowo:
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
Czy jest to możliwe przy użyciu tylko unittest
wbudowanego w Python 2.7?
FYI, struktura mojego projektu wygląda następująco:
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
Aktualizacja : Jest to możliwe z, unittest2
ale chcę znaleźć coś równoważnego używając tylkounittest
Z https://pypi.python.org/pypi/unittest2
unittest2 zawiera bardzo podstawowy kolektor testów kompatybilny z setuptools. Określ test_suite = 'unittest2.collector' w swoim setup.py. Rozpoczyna to wykrywanie testowe z domyślnymi parametrami z katalogu zawierającego setup.py, więc jest to prawdopodobnie najbardziej przydatne jako przykład (zobacz unittest2 / collector.py).
Na razie używam tylko skryptu o nazwie run_tests.py
, ale mam nadzieję, że mogę się tego pozbyć, przechodząc do rozwiązania, które tylko używa python setup.py test
.
Oto plik, run_tests.py
który mam nadzieję usunąć:
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)