2012-10-01 19 views
15

Mi carpeta unittest está organizada de esta manera.Descubrimiento de la prueba unitaria Python con subcarpetas

. 
|-- import 
| |-- import.kc 
| |-- import.kh 
| `-- import_test.py 
|-- module 
| |-- module.kc 
| |-- module.kh 
| `-- module_test.py 
`-- test.py 

me gustaría simplemente ejecute test.py para ejecutar cada uno de mis *_test.py usando unittest módulo de Python. Actualmente, mi test.py contiene

#!/usr/bin/env python 

import unittest 

if __name__ == "__main__": 
    suite = unittest.TestLoader().discover('.', pattern = "*_test.py") 
    unittest.TextTestRunner(verbosity=2).run(suite) 

La documentación de Python dice que debería detectar automáticamente mi prueba en las subcarpetas. Pero no es así

Por el momento, sólo se da salida a

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

Estoy seguro de que no es un problema con mi archivo *_test.py, porque cuando los muevo en el directorio raíz, que funciona bien .. Lo am Estoy haciendo mal?

Respuesta

19

Agregue __init__.py en los directorios import y module.

+0

Funcionó simplemente tocando el archivo '__init __. Py', gracias. ¿Puedes explicarme por qué tengo que hacer esto? ¿Y hay otra solución que? Porque estoy trabajando con otras personas, y me gustaría que las pruebas sean la forma más fácil de crear. – tomahh

+2

Este es un artefacto de la forma en que se implementa el descubrimiento de prueba. Esencialmente, cada directorio que contiene una prueba tiene que ser importable como un módulo de Python. Consulte [docs] (http://docs.python.org/2/library/unittest.html#test-discovery) para obtener más información. –

2

Considere usar nose en lugar del módulo unittest de vainilla, si puede cambiar. No necesitarás perder el tiempo con tu propio archivo test.py o cualquier cosa; una ejecución de nosetests encontrará y ejecutará todas sus pruebas.

Cuestiones relacionadas