J'essaie de comprendre comment obtenir python setup.py test
pour exécuter l'équivalent de python -m unittest discover
. Je ne veux pas utiliser un script run_tests.py script et je ne veux pas utiliser d'outils de test externes (comme nose
o py.test
). Il n'y a pas de problème si la solution ne fonctionne que sur python 2.7.
En setup.py
Je pense que je dois ajouter quelque chose à la rubrique test_suite
et/ou test_loader
dans la configuration, mais je n'arrive pas à trouver une combinaison qui fonctionne correctement :
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
Est-ce possible en utilisant uniquement unittest
intégré dans Python 2.7 ?
Pour information, la structure de mon projet est la suivante :
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
Mise à jour : C'est possible avec unittest2
mais je veux trouver quelque chose d'équivalent en utilisant seulement unittest
De https://pypi.python.org/pypi/unittest2
unittest2 inclut un collecteur de tests très basique compatible avec setuptools. Spécifiez test_suite = 'unittest2.collector' dans votre setup.py. Ceci démarre la découverte des tests avec les paramètres par défaut du répertoire contenant setup.py, et est donc plus utile en tant qu'exemple (voir unittest2/collector.py).
Pour l'instant, j'utilise simplement un script appelé run_tests.py
mais j'espère pouvoir m'en débarrasser en passant à une solution qui n'utilise que des python setup.py test
.
Voici le run_tests.py
J'espère pouvoir le retirer :
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)