Ejecución de pruebas de un módulo
-
21-09-2019 - |
Pregunta
Estoy tratando de hacer algunas pruebas unitarias en pitón de lo que creo que es un módulo. Tengo una estructura de directorios como
TestSuite.py
UnitTests
|__init__.py
|TestConvertStringToNumber.py
En testsuite.py TENGO
import unittest
import UnitTests
class TestSuite:
def __init__(self):
pass
print "Starting testting"
suite = unittest.TestLoader().loadTestsFromModule(UnitTests)
unittest.TextTestRunner(verbosity=1).run(suite)
Lo que parece dar inicio a la prueba bien, pero no recoger a cualquiera de la prueba en TestConvertNumberToString.py. En esa clase Tengo un conjunto de funciones que comienzan con 'prueba'.
¿Qué debería estar haciendo tal que la ejecución de pitón TestSuite.py en realidad arranca todas mis pruebas en unittests?
Solución
Aquí hay un código que se ejecutará todas las pruebas unitarias en un directorio:
#!/usr/bin/env python
import unittest
import sys
import os
unit_dir = sys.argv[1] if len(sys.argv) > 1 else '.'
os.chdir(unit_dir)
suite = unittest.TestSuite()
for filename in os.listdir('.'):
if filename.endswith('.py') and filename.startswith('test_'):
modname = filename[:-2]
module = __import__(modname)
suite.addTest(unittest.TestLoader().loadTestsFromModule(module))
unittest.TextTestRunner(verbosity=2).run(suite)
Si usted lo llama testsuite.py, entonces tendría que ejecutar de esta manera:
testsuite.py UnitTests
Otros consejos
El uso de corredor de prueba de "prueba" de trenzado, que puede deshacerse de TestSuite.py, y acaba de hacer:
$ trial UnitTests.TestConvertStringToNumber
en la línea de comandos; o, mejor aún, simplemente
$ trial UnitTests
para descubrir y ejecutar todas las pruebas en el paquete.