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 .