Ich versuche herauszufinden, wie ich python setup.py test
das Äquivalent von ausführen kann python -m unittest discover
. Ich möchte kein Skript run_tests.py verwenden und keine externen Testtools (wie nose
oder py.test
) verwenden. Es ist in Ordnung, wenn die Lösung nur unter Python 2.7 funktioniert.
In setup.py
, ich glaube ich etwas zu den hinzufügen müssen test_suite
und / oder test_loader
Felder in Config, aber ich kann scheinen nicht eine Kombination zu finden , die richtig funktioniert:
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
Ist dies nur unittest
mit Python 2.7 möglich?
Zu Ihrer Information, meine Projektstruktur sieht folgendermaßen aus:
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
Update : Dies ist möglich mit, unittest2
aber ich möchte etwas Äquivalentes nur mit findenunittest
Von https://pypi.python.org/pypi/unittest2
unittest2 enthält einen sehr einfachen Setuptools-kompatiblen Testkollektor. Geben Sie test_suite = 'unittest2.collector' in Ihrer setup.py an. Dies startet die Testerkennung mit den Standardparametern aus dem Verzeichnis, das setup.py enthält. Daher ist dies möglicherweise am nützlichsten (siehe unittest2 / collector.py).
Im Moment verwende ich nur ein Skript namens run_tests.py
, aber ich hoffe, dass ich dies beseitigen kann, indem ich zu einer Lösung übergehe, die nur verwendet python setup.py test
.
Hier ist das, was run_tests.py
ich entfernen möchte:
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)