2011-02-23 13 views
26

Python's unittest discover no encuentra mis pruebas!`python -m unittest discover` no descubre las pruebas

He estado usando nose para descubrir mis pruebas unitarias y está funcionando bien. Desde el nivel superior de mi proyecto, si me quedo nosetests me sale:

Ran 31 tests in 0.390s 

Ahora que Python 2.7 unittest has discovery, He intentado usar

python -m unittest discover 

pero consigo

Ran 0 tests in 0.000s 

Mi estructura de directorio es:

myproj/ 
    reporter/ 
    __init__.py 
    report.py 
    [other app modules] 
     tests/ 
     __init__.py 
     test-report.py 
     [other test modules] 

¿Tiene alguna idea de por qué el algoritmo de descubrimiento de unittest no puede encontrar las pruebas?

estoy usando Python 2.7.1 y 1.0.0 de la nariz en Windows 7.

+3

Acabo de encontrar que las pruebas se descubren si cambio el nombre 'test-report.py' a' test_report.py'. A menos que alguien pueda arrojar algo de luz sobre esto, presentaré un informe de error al mantenedor del módulo unittest. – blokeley

+0

Me sorprendió que esto funcione en la nariz, ya que el informe de prueba no sería importable. – dbn

Respuesta

31

El comportamiento es intencional, pero la documentación podía hacer esto más claro. Si mira el primer párrafo en la sección de descubrimiento de prueba, dice:

Para que las pruebas de un proyecto sean compatibles con el descubrimiento de prueba, todas deben ser importables desde el directorio de nivel superior del proyecto (en otras palabras, todos deben estar en paquetes de Python).

Un corolario de eso es que los nombres de los archivos también deben ser nombres de módulos de Python válidos. test-report.py falla esa prueba, ya que test-report no es un identificador legal de Python.

Un error en los documentos que sugiere que esto se mencione explícitamente en la documentación para la opción de patrón -p probablemente sea una buena forma de avanzar.

+4

Error de documentación archivado en http://bugs.python.org/issue11298 – blokeley

+12

También tenga en cuenta que el patrón de descubrimiento predeterminado busca módulos de prueba con el prefijo "prueba" ... Esto es lo que me atrapó. –

Cuestiones relacionadas