2010-05-10 18 views
6

Obtengo ImportError al ejecutar mis pruebas de unidad usando Nose y no cuando lo ejecuto de forma independiente. Todos los archivos mencionados aquí pueden verse en http://gist.github.com/395541#.ImportError usando nose, no ImportError usando rawtesttest?

Si funciono con la escritura de la prueba, importTest-Test.py, directamente me sale esta salida:

C:\usr\x\data\src\Python\mmm>python importTest-Test.py 
In mmdb 
In BusinessLogic 
[] 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.001s 

Si permito la nariz para ejecutarlo me sale un error:

C:\usr\x\data\src\Python\mmm>nosetests.exe 
E 
====================================================================== 
ERROR: Failure: ImportError (No module named mmdb.DataAccess.AttemptDB) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "c:\bin\installed\python2.6\lib\site-packages\nose-0.11.3-py2.6.egg\nose\loader.py", line 382, in loadTestsFromName 
    addr.filename, addr.module) 
    File "c:\bin\installed\python2.6\lib\site-packages\nose-0.11.3-py2.6.egg\nose\importer.py", line 39, in importFromPath 
    return self.importFromDir(dir_path, fqname) 
    File "c:\bin\installed\python2.6\lib\site-packages\nose-0.11.3-py2.6.egg\nose\importer.py", line 86, in importFromDir 
    mod = load_module(part_fqname, fh, filename, desc) 
    File "C:\usr\x\data\src\Python\mmm\importtest-Test.py", line 2, in <module> 
    import importtest 
    File "C:\usr\x\data\src\Python\mmm\importtest.py", line 1, in <module> 
    from mmdb.BusinessLogic.AttemptManager import AttemptManager 
    File "C:\usr\x\data\src\Python\mmm\mmdb\BusinessLogic\AttemptManager.py", line 1, in <module> 
    from mmdb.DataAccess.AttemptDB import AttemptDB 
ImportError: No module named mmdb.DataAccess.AttemptDB 

---------------------------------------------------------------------- 
Ran 1 test in 0.002s 

FAILED (errors=1) 

los archivos implicados en el paquete que la nariz está teniendo dificultades con están en la siguiente estructura - algunos pueden ver aquí http://gist.github.com/395541#:

.

Esto está sucediendo en Win32/Python 2.6/Nose 0.11.3.

Estaría agradecido por cualquier ayuda.

gracias.

+2

¿Alguna vez descubrió su problema? Tengo un problema muy similar y no he podido solucionarlo. – Aaron

Respuesta

1

Por defecto, la nariz manipula la PYTHONPATH que utiliza. Puede intentar desactivar este comportamiento utilizando el interruptor -P.

+0

Muchas gracias por su respuesta, lo agradezco. Lamentablemente cuando hago "nosetests.exe -P" la salida es la misma que antes – shearichard

0

Esta es una respuesta para un caso de uso muy específico que implica PyUnit.

Tuve un conjunto de pruebas unitarias funcionando bien bajo PyDev. Un día, cometí un error de tipeo y PyDev agregó una importación automática para una parte del paquete pandas. Por lo general, mantengo mi código doblado, así que no lo vi de inmediato.

El error que apareció en una parte posterior del conjunto de prueba fue "Error: no se pudo importar la nariz".

En la depuración, encontré que un nombre de archivo de datos tenía uno de los nombres de subdirectorio repetido. Parecía que el corredor de prueba estaba cambiando el directorio de trabajo al subdirectorio que contenía el archivo .py, pero no volvía al directorio del proyecto. Una llamada a os.path.realpath ("_ archivo _") para configurar la ruta del archivo de datos devolvía el subdirectorio de prueba en lugar del directorio del proyecto esperado, con el efecto neto de que no se encontraron los datos y la prueba falló.

"Reparar" el código que configuraba la ruta del archivo de datos resolvió este error. Sin embargo, mientras trabajaba para recuperar los errores restantes, descubrí y eliminé la declaración de importación no deseada. En ese momento, la ruta del archivo de datos comenzó a dar errores, así que lo cambié a la forma original y todo estaba bien.

Así que ... si descubre que de repente está recibiendo estos errores "nariz", es posible que su edición haya introducido inadvertidamente una instrucción de importación que arroje a PyUnit fuera de control.

Agregué la respuesta aquí porque parte de mi experiencia consistía en ejecutar los archivos de prueba individuales con rawtesttest (del menú contextual de PyDev), y me sentí muy desconcertado de por qué funcionaban de esa manera, pero no cuando funcionaba corredor de prueba completo.

Cuestiones relacionadas