python - unit - py.test: error de descubrimiento de prueba cuando las pruebas en directorios diferentes se llaman igual
unittest python 3 (2)
Esta es una característica real de py.test. Puede encontrar el motivo de este comportamiento en pytest.org - Buenas prácticas de integración - Elegir un diseño de prueba / reglas de importación :
- evite los archivos
__init__.py
en sus directorios de prueba. De esta forma, sus pruebas pueden ejecutarse fácilmente en una versión instalada demypkg
, independientemente de si el paquete instalado contiene las pruebas o no.
Como ese es el flujo de trabajo recomendado para trabajar con py.test: instala el paquete en desarrollo con pip install -e
, luego pruébalo.
Debido a esto, yo mismo opto por nombres de prueba únicos, en la convención sobre la manera de configuración. También garantiza que no obtenga nombres de prueba ambiguos en los diversos resultados de ejecución de prueba.
Si necesita conservar los nombres de las pruebas y no le importa la funcionalidad mencionada anteriormente, debería aceptar introducir __init__.py
.
Al usar py.test, dos pruebas llamadas de la misma manera en diferentes directorios hacen que py.test falle. ¿Porqué es eso? ¿Cómo puedo cambiar esto sin cambiar el nombre de todas las pruebas?
Para duplicar do:
; cd /var/tmp/my_test_module
; mkdir -p ook/test
; mkdir -p eek/test
; touch ook/test/test_proxy.py
; touch eek/test/test_proxy.py
; py.test
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.2.4
collected 0 items / 1 errors
==================================== ERRORS ====================================
___________________ ERROR collecting ook/test/test_proxy.py ____________________
import file mismatch:
imported module ''test_proxy'' has this __file__ attribute:
/home/ygolanski/code/junk/python/mymodule/eek/test/test_proxy.py
which is not the same as the test file we want to collect:
/home/ygolanski/code/junk/python/mymodule/ook/test/test_proxy.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules
=========================== 1 error in 0.01 seconds ============================
Poner __init__.py
es una forma de resolver el conflicto. A diferencia de nose, el actual Pytest no intenta descargar módulos de prueba para importar módulos de prueba con el mismo nombre de importación. Solía pensar que es un poco mágico hacer esto desimportar automáticamente y podría arruinar las expectativas de la gente sobre lo que hace el mecanismo de importación; a veces la gente confía en el estado global de un módulo de prueba y con la descarga automática lo pierde (un módulo de prueba importado desde otro módulo de prueba podría hacer cosas inesperadas). Pero tal vez no es un problema práctico y, por lo tanto, Pytest podría agregar un truco similar ...