2011-08-03 18 views
8

Acabo de terminar de escribir la sección central de un proyecto en el que estoy trabajando y quiero escribir una prueba para ello usando unittest antes de continuar. Soy consciente de que debería haber hecho esto antes, pero cuando comencé no conocía Python, así que ... lo que sea .. lo que sea ..¿Cómo importo un módulo de un directorio principal? (Propósitos de la prueba unitaria)

Lo que me gustaría lograr: tengo un subpaquete del paquete principal que contiene todos los módulos que quiero probar dentro de él. Quiero incluir un subsubpackage llamado 'tests' o algo que luego contenga todos mis casos de prueba, que me gustaría poder agregar a un banco de pruebas desde fuera del paquete para que eventualmente pueda ejecutar toda la prueba de todo el proyecto de una vez.

La estructura es algo como esto:

/projectPackage 
/projectPackage/package 
/projectPackage/package/\__init__.py (empty) 
/projectPackage/package/someModule.py 
/projectPackage/package/... (more modules) 
/projectPackage/package/testing.py (runs all the tests in /tests/) 
/projectPackage/package/tests 
/projectPackage/package/tests/\__init__.py (empty) 
/projectPackage/package/tests/someModuleTests.py 

problema que estoy teniendo:

someModuleTests tiene que importar la someModule del paquete principal para que pueda probar sus métodos. Esto no parece funcionar. Tengo varios errores como:

Attempted relative import beyond toplevel package 

De todos modos, espero que es sólo porque soy un novato Python! Tengo mis propias ideas sobre cómo voy a hacerlo para este proyecto, porque, por supuesto, cada una es diferente, pero también se agradece cualquier consejo general sobre la estructuración de proyectos Python medianos y grandes.

Respuesta

13

Ejecute la prueba unitaria desde el directorio padre para que el directorio esté en su PYTHONPATH (el directorio de trabajo actual siempre lo es). Esto se hace ejecutando el archivo de prueba desde su directorio padre o usando algo como nosetest que busca recursivamente todas las pruebas en su paquete.

No utilice importaciones relativas, causan cosas como esta. No hackes tu PYTHONPATH y/o sys.path para intentar solucionarlo tampoco.

+0

bien grande, gracias. Te recomendaría, pero no tengo suficiente reputación: S –

+0

No hay problema, podrías elegir mi pasado como la respuesta si te gusta lo suficiente, creo :-) – ikanobori

1

Si puede ejecutar su código, entonces su PYTHONPATH ya debería estar configurada correctamente. Lo que debe hacer es especificar el módulo que desea importar, p.

import projectPackage.package.someModule 
1

Teniendo en cuenta que está utilizando herramientas de línea de comando para ejecutar las pruebas, puede seguir the docs y tener algo como lo siguiente:

python -m unittest package.tests.someModuleTests 
Cuestiones relacionadas