Estoy tratando de averiguar cómo python setup.py test
ejecutar el equivalente de python -m unittest discover
. No quiero usar un script run_tests.py y no quiero usar ninguna herramienta de prueba externa (como nose
o py.test
). Está bien si la solución solo funciona en Python 2.7.
En setup.py
, creo que necesito agregar algo a los campos test_suite
y / o test_loader
en la configuración, pero parece que no puedo encontrar una combinación que funcione correctamente:
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
¿Es esto posible usando solo unittest
construido en Python 2.7?
FYI, la estructura de mi proyecto se ve así:
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
Actualización : esto es posible con unittest2
pero quiero encontrar algo equivalente usando solounittest
De https://pypi.python.org/pypi/unittest2
unittest2 incluye un colector de pruebas compatible con setuptools muy básico. Especifique test_suite = 'unittest2.collector' en su setup.py. Esto inicia el descubrimiento de pruebas con los parámetros predeterminados del directorio que contiene setup.py, por lo que quizás sea más útil como ejemplo (consulte unittest2 / collector.py).
Por ahora, solo estoy usando un script llamado run_tests.py
, pero espero poder deshacerme de esto moviéndome a una solución que solo use python setup.py test
.
Aquí está el run_tests.py
que espero eliminar:
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)