testing - unittest - ¿Cómo ejecuto una prueba única con Nose in Pylons?
unit test en python (4)
Tengo una aplicación Pylons 1.0 con un montón de pruebas en el directorio de prueba / funcional. Estoy obteniendo resultados de pruebas extraños y solo quiero ejecutar una prueba única. La documentación de la nariz dice que debería poder pasar un nombre de prueba en la línea de comando pero obtengo ImportErrors sin importar lo que haga
Por ejemplo:
nosetests -x -s sometestname
Da:
Traceback (most recent call last):
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/loader.py", line 371, in loadTestsFromName
module = resolve_name(addr.module)
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/util.py", line 334, in resolve_name
module = __import__(''.''.join(parts_copy))
ImportError: No module named sometestname
Me sale el mismo error para
nosetests -x -s appname.tests.functional.testcontroller
¿Cual es la sintaxis correcta?
Escribí este pequeño guión, basado en las respuestas anteriores:
#!/usr/bin/env bash
#
# Usage:
#
# ./noseTest <filename> <method_name>
#
# e.g.:
#
# ./noseTest test/MainTest.py mergeAll
#
# It is assumed that the file and the test class have the _same name_
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don''t follow this convention, this script won''t work for you.
#
testFile="$1"
testMethod="$2"
testClass="$(basename "$testFile" .py)"
nosetests "$testFile:$testClass.test_$testMethod"
Para mí, usando Nosetests 1.3.0 estas variantes están funcionando (pero asegúrese de tener __init__.py
en su carpeta de pruebas):
nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page
Tenga en cuenta que solo dos puntos entre el nombre del módulo y el nombre de la clase.
Tengo que agregar la extensión de archivo ".py", es decir,
r''/path_to/my_file.py:'' + r''test_func_xy''
Tal vez esto se deba a que no tengo ninguna clase en el archivo. Sin el .py
, la nariz se quejaba:
No se puede encontrar test_func_xy invocable en file / path_to / my_file: el archivo no es un módulo de python
Y esto aunque tengo un __init__.py
en la carpeta /path_to/
.
nosetests appname.tests.functional.test_controller
debería funcionar, donde el archivo se llama test_controller.py
.
Para ejecutar una clase de prueba y un método específicos, use una ruta de acceso de la forma module.path:ClassNameInFile.method_name
, es decir, con dos puntos que separan la ruta del módulo / archivo y los objetos dentro del archivo. module.path
es la ruta relativa al archivo (por ejemplo, tests/my_tests.py:ClassNameInFile.method_name
).