pytest tmp_path: Prueba Archivos sin Ensuciar el Proyecto resuelve un problema frecuente en proyectos Python: Crea un directorio exclusivo por prueba y úsalo como objeto pathlib.Path. Esta guía explica el mecanismo, presenta un ejemplo ejecutable y marca los límites que evitan una implementación frágil.
Concepto y caso de uso
tmp_path proporciona un Path temporal aislado. Evita colisiones globales, permite ejecución paralela y deja la limpieza a pytest.
Para repasar los fundamentos relacionados, consulta también la guía de pytest. La integración es más simple cuando cada función recibe dependencias y datos explícitamente en lugar de depender de estado global.
Ejemplo práctico
from pathlib import Path
def save_report(path: Path, rows: list[str]) -> None:
path.write_text("\n".join(rows), encoding="utf-8")
def test_save_report(tmp_path: Path):
output = tmp_path / "report.txt"
save_report(output, ["alpha", "beta"])
assert output.read_text(encoding="utf-8") == "alpha\nbeta"
Pasa la ruta a las funciones en lugar de descubrir una carpeta global. Crea solo los archivos necesarios y verifica contenido, encoding y estructura.
Decisiones importantes
La elección correcta depende del contrato público, del volumen y del comportamiento ante fallos.
Considera concurrencia, entradas vacías y fallos parciales. Documenta cada límite que afecte a consumidores y usa nombres que expresen intención.
Errores frecuentes
El ejemplo mínimo no sustituye límites, manejo de errores y observabilidad. Escribir en el repositorio deja residuos y crea dependencia del orden. Simular toda la API de archivos puede ocultar errores reales de integración.
Evita capturar excepciones sin contexto o devolver resultados parciales como si fueran completos. Un fallo explícito suele ser más seguro que datos silenciosamente incorrectos.
Cómo validar
Valida el comportamiento y no solo el camino feliz. Ejecuta repetidamente y en paralelo, usa nombres con espacios y caracteres no ASCII y prueba cuando falta un archivo.