2 puntos por tmdgusya 2026-01-03 | Aún no hay comentarios. | Compartir por WhatsApp

Al escribir código de pruebas con Pytest y usar MagicMock, seguramente más de una vez te pasó que el autocompletado del IDE no funcionaba o que perdiste tiempo por escribir mal el nombre de un método.

Los mocks existentes son muy potentes, pero se pierden las pistas de tipos, así que es difícil aprovechar la ayuda de verificadores de tipos como mypy o pyright. Para resolver esto, creamos typed-pytest, que ofrece mocking con seguridad de tipos (type-safe mocking).

Características principales:

  • Autocompletado completo en el IDE: soporta autocompletado no solo para nombres de métodos y parámetros de la clase real, sino también para métodos exclusivos de mocks como assert_called_once_with.
  • Detección de errores tipográficos en tiempo de lint: si llamas a un método que no existe o pasas argumentos incorrectos, lo detecta de inmediato antes de ejecutar las pruebas (con mypy/pyright).
  • Generador dedicado de stubs: analiza las clases del proyecto y genera automáticamente archivos de pistas de tipos (.pyi). También soporta clases con dependencias externas como FastAPI y SQLAlchemy.
  • Backend flexible: si quieres mayor velocidad, puedes elegir inspect; si necesitas pistas de tipos de retorno más precisas, puedes elegir el backend stubgen. (Actualmente stubgen está en fase experimental).

Ejemplo de uso:

# MagicMock tradicional: aunque haya un error tipográfico, no se puede saber antes de ejecutar  
mock = MagicMock(spec=UserService)  
mock.get_usr(1) # error tipográfico de get_user, pero el linter no lo detecta  
  
# typed-pytest: el linter marca error de inmediato y hay autocompletado  
from typed_pytest_stubs import typed_mock, UserService  
  
mock = typed_mock(UserService)  
mock.get_usr # ❌ Error: "get_usr" is not a member of UserService  
mock.get_user.assert_called_once_with(user_id=1) # ✅ verificación de tipos completada  

Los archivos stub generados están diseñados para usarse generándolos solo en el entorno local de desarrollo y en CI, sin necesidad de subirlos a Git. También se ha tenido en cuenta la compatibilidad con herramientas modernas como uv.

GitHub: https://github.com/tmdgusya/typed-pytest

Espero que esto sea útil para quienes quieran aprovechar por completo las ventajas del sistema de tipos también en el código de pruebas. ¡Siempre son bienvenidos los comentarios para mejorar la usabilidad!

Aún no hay comentarios.

Aún no hay comentarios.