modules - python packages tutorial
Haciendo py.test, cobertura y tox trabajo juntos:__init__.py en la carpeta de pruebas? (2)
Tengo un problema extraño con tox
, py.test
, coverage
y pytest-cov
: cuando py.test
con la opción --cov
se inicia desde tox
, parece que se requiere un archivo __init__.py
en la carpeta de tests
que es No es inmediatamente obvio.
Mientras escribo esta publicación, he resuelto el problema inicial agregando las tests/__init__.py
mencionadas anteriormente tests/__init__.py
, pero hasta este momento no entiendo por qué funciona o no funciona exactamente, por lo que sigo pidiendo ayuda. Por favor, vea más abajo para más detalles.
He encontrado una pregunta relacionada en SO, pero solo lo hace más confuso porque la respuesta parece ser opuesta a lo que he descubierto hasta ahora: los archivos `py.test` y` __init __. Py`
Consulte también los documentos oficiales aquí: py.test - Buenas prácticas de integración (en la parte inferior de la página).
Estructura del proyecto simplificada:
setup.py
tox.ini
.coveragerc
project/
__init__.py
module1.py
module2.py
tests/
__init__.py (optional, an empty file)
test_module1.py
test_module2.py
Parte relevante de tox.ini
:
[testenv:check]
commands = py.test --cov=project --cov-report=term
deps =
pytest
coverage
pytest-cov
[pytest]
python_files = test_*.py
norecursedirs = .tox
Parte relevante de .coveragerc
:
[run]
branch = True
omit = project/tests/*
Ahora, los resultados:
-
py.test --cov=project --cov-report=term
run from project root => cobertura correcta si el archivotests/__init__.py
está presente o no. -
tox -e check
sintests/__init__.py
=> las pruebas se han descubierto y ejecutado, perotests/__init__.py
una advertencia "Advertencia de Coverage.py: No se recopilaron datos". y la cobertura es del 0% para todos los módulos. -
tox -e check
con lastests/__init__.py
=> vuelva a corregir la cobertura.
No es inmediatamente obvio para mí por qué el archivo tests/__init__.py
tiene que estar allí (agregar este archivo vacío solucionó el problema inicial) para la ejecución de tox
, pero no importa cuando ejecuta las pruebas / cobertura manualmente. ¿Algunas ideas?
Gracias.
Use --cov {envsitepackagesdir}/<your-package-name>
en tox.ini.
Ver: Usar py.test con cobertura no incluye importaciones
Me deshice del uso de pytest-cov y ejecuté la cobertura en su lugar ...
También noté que con pytest, necesitaba el init .py en blanco en mi directorio de prueba para funcionar correctamente. Probablemente hay una razón para ello en alguna parte.
Me doy cuenta de que esto tiene un par de años, pero en caso de que alguien más encuentre esto ...