¿Cómo puedo ejecutar todas las pruebas unitarias de Python en un directorio?
Tengo un directorio que contiene mis pruebas unitarias de Python. Cada módulo de prueba unitaria tiene la forma test_*. py . Estoy intentando crear un archivo llamado all_test.py eso, lo adivinó, ejecutará todos los archivos en el formulario de prueba antes mencionado y devolverá el resultado. He intentado dos métodos hasta ahora; ambos han fracasado. Voy a mostrar los dos métodos, y espero que alguien por ahí sabe cómo realmente hacer esto correctamente.
Para mi primer intento valiente, pensé: "Si solo importa todos mis módulos de prueba en el archivo, y luego llamar a esto unittest.main()
doodad, funcionará, ¿verdad?"Bueno, resulta que estaba equivocado.
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
if __name__ == "__main__":
unittest.main()
Esto no funcionó, el resultado que obtuve fue:
$ python all_test.py
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Para mi segundo intento, pensé, ok, tal vez voy a tratar de hacer todo esto de las pruebas de una manera más "manual". Así que intenté hacer eso a continuación:
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
[__import__(str) for str in module_strings]
suites = [unittest.TestLoader().loadTestsFromName(str) for str in module_strings]
[testSuite.addTest(suite) for suite in suites]
print testSuite
result = unittest.TestResult()
testSuite.run(result)
print result
#Ok, at this point I have a result
#How do I display it as the normal unit test command line output?
if __name__ == "__main__":
unittest.main()
Esto tampoco funcionó, ¡pero parece tan cerca!
$ python all_test.py
<unittest.TestSuite tests=[<unittest.TestSuite tests=[<unittest.TestSuite tests=[<test_main.TestMain testMethod=test_respondes_to_get>]>]>]>
<unittest.TestResult run=1 errors=0 failures=0>
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Parece que tengo una suite de algún tipo, y puedo ejecutar el resultado. Soy un poco preocupado por el hecho de que dice que solo tengo run=1
, parece que debería ser run=2
, pero es progreso. Pero, ¿cómo paso y muestro el resultado a main? ¿O cómo básicamente lo hago funcionar para que pueda ejecutar este archivo, y al hacerlo, ejecutar todas las pruebas unitarias en este directorio?
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52