with tutorial framework espaƱol djangoproject desde con cero applications python python-import python-unittest

python - framework - tutorial django



Importaciones relativas con unittest en Python (2)

Corro con el mismo problema y la respuesta de kai lo resolvió. Solo quiero complementar su respuesta con el contenido de test.py (como pidió @gsanta) . Solo lo he probado en Python 2.7:

from packages.tests import test_a, test_b import unittest # for test_a unittest.main(test_a) # for test_b unittest.main(test_a)

entonces puedes simplemente

../project $ python test.py

Estoy tratando de usar las pruebas de unidad de Python y las importaciones relativas, y parece que no puedo resolverlo. Sé que hay muchas preguntas relacionadas, pero ninguna ha ayudado hasta ahora. Lo siento si esto es repetitivo, pero realmente agradecería cualquier ayuda. Estaba intentando usar la sintaxis de PEP 328 http://www.python.org/dev/peps/pep-0328/ pero debo tener algo mal.

Mi estructura de directorio es:

project/ __init__.py main_program.py lib/ __init__.py lib_a lib_b tests/ __init__.py test_a test_b

Ejecuto mis pruebas usando:

python -m unittest test_module1 test_module2

test_a necesita importar tanto lib / lib_a como main_program. Este es el código de test_a que estoy tratando de usar para la importación:

from ..lib import lib_a as lib from ...project import main_program

ambos plantean este error:

ValueError: Attempted relative import in non-package

Todos mis archivos de inicio .py están actualmente vacíos.

Cualquier consejo específico sería muy apreciado !!

Editar:

Esta puede ser la respuesta: ¿Paquetes de Python? Todavía estoy verificando si esto funcionará.

Edición II:

Para aclarar, en este punto he intentado ejecutar mi archivo de prueba de 3 maneras diferentes:

project/tests $ python -m unittest test_a project/tests $ python -m test_a project/tests $ ./test_a

Los tres fallan con el mismo error que el anterior. Cuando uso las mismas tres sintaxis pero en el directorio del proyecto, obtengo este error:

ValueError: Attempted relative import beyond toplevel package

Gracias de nuevo.


En mi experiencia, es más fácil si la raíz de su proyecto no es un paquete, así:

project/ test.py run.py package/ __init__.py main_program.py lib/ __init__.py lib_a lib_b tests/ __init__.py test_a test_b

Sin embargo, a partir de Python 3.2, el módulo unittest proporciona la opción -t , que le permite establecer el directorio de nivel superior, por lo que podría hacer (desde el package/ ):

python -m unittest discover -t ..

Más detalles en la documentación de unittest .