unittest run assert_equal python nose

python - assert_equal - run nosetests



Nariz incapaz de encontrar pruebas en ubuntu (7)

¿Hay alguna razón por la que Nose no pueda encontrar pruebas en Ubuntu 9.04?

Estoy usando la nariz 0.11.1 con python 2.5.4.
Solo puedo ejecutar pruebas si especifico explícitamente el nombre del archivo. Si no especifico el nombre de archivo solo dice 0 pruebas .

El mismo proyecto ejecuta bien las pruebas en mi Mac, ¡así que estoy bastante perplejo!


Algo relacionado, si está ejecutando pruebas fuera de un directorio, es decir

nosetests ... tests/

donde pruebas es el nombre de la carpeta con mis pruebas, y tiene funciones de prueba de python separadas en uno de los módulos .py ... Sus funciones tienen que comenzar con ''prueba'' para que las pruebas de usuario reconozcan que es una prueba que desea ejecutar.

por ejemplo:

def test_something(): ...

Nosetests ejecutará esta función cuando se ejecute en este directorio mientras

def somethin_to_test(): ...

no lo haría


Después de mirar a través de la fuente de la nariz, específicamente el archivo selector.py, si miras lo que está sucediendo,

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129

Cuando se comprueba si queremos wantFile , se llama self.matches , que luego realiza una búsqueda de self.matches regex contra la match , que es lo que testMatch pasado como testMatch .

El problema se produce cuando luego marca más abajo (y, a lo largo de ese archivo),

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L152

Ejecuta el mismo tipo de verificaciones de nuevo, contra wantFunction .

Esto significa que, si tiene una estructura diferente para su paquete, su archivo de contenido y su clase / función de prueba real, tendrá que crear una expresión regular complicada para que coincida en cada etapa.

Para mí, cuando aprendí esto, elegí prefijar mi paquete, contenedor y funciones de prueba con un bit común, es decir

setests ├── __init__.py ├── setest_area1.py └──── def setest_someblock(): ...

Y luego mi comando de la nose funciona como,

nose --testMatch="setest"

Esto luego filtra la forma en que espero que funcione.


Este comportamiento es casi seguro porque sus archivos no están nombrados de acuerdo con el comportamiento de comparación de prueba de la nariz. De la nariz docs :

nose recopila las pruebas automáticamente de los archivos de origen de Python, los directorios y los paquetes que se encuentran en su directorio de trabajo (que de forma predeterminada es el directorio de trabajo actual). Cualquier archivo, directorio o paquete fuente de Python que coincida con la expresión regular testMatch (de manera predeterminada: (?: ^ | [B _.-]) [Tt] est) se recopilará como prueba (o fuente para la recopilación de pruebas).

El énfasis era mío.

Algunos nombres de ejemplo que coincidirían:

  • TestFoo.py
  • Foo-Test.py
  • Foo_Test.py
  • Foo.Test.py (tenga en cuenta que éste intentará importar Foo y generará una excepción si no puede)

Un nombre que parece que coincidiría, pero en realidad no:

  • FooTest.py

Si solo cambia el nombre de sus archivos, debería estar listo.

Actualización : no pude __init__.py cuenta de los detalles que ha publicado, pero ¿es posible que a sus directorios de prueba les falten sus archivos __init__.py ?

... asegúrese de que sus directorios de "pruebas" sean en realidad módulos (tienen un archivo __init__.py vacío).


La otra cosa que siempre me molesta es que no ejecutará pruebas en archivos ejecutables. No estoy exactamente seguro de por qué eso haría una diferencia en Mac / Ubuntu, pero vale la pena intentarlo.

Asegúrate de que los scripts de alguna manera no tengan chmod +x ''d en la Mac ... Y si lo hicieron, repáralos con chmod -x $(find tests/ -name ''*.py'') .


Puedo confirmar que, como dijo @ david-wolever, no pueden ser ejecutables en Ubuntu. correr

nosetests -vv --collect-only

para ver todos los detalles sobre qué archivos fueron examinados.


Utilice los -all-modules y encontrará todas las pruebas.

nosetests --all-modules ./tests


Yo tuve el mismo problema. Mis pruebas funcionaron bien en Windows, pero no en Ubuntu.

En Ubuntu, si ejecuta:

nosetests -vv --collect-only

Probablemente verá que está saltando su archivo de prueba porque es un ejecutable: _Tools / LintControlFiles / test_HgLint.py es ejecutable; saltado

Para obtener la nariz para considerar ejecutables, ejecútelo así:

nosetests --exe