En esta publicación del blog, aprenderás:
-
¿Qué es la Prueba Unitaria y la Pirámide de Pruebas?
-
¿Por qué necesitamos Pruebas Unitarias?
-
¿Qué hace que una buena prueba unitaria?
-
¿Cómo escribir Pruebas Unitarias con PyTest (Conceptos básicos)?
-
¿Cómo simular dependencias adecuadamente en varios escenarios?
1. Prerrequisito
Para seguir este tutorial, necesitarías instalar
pytest
y
pytest-mock
. He proporcionado comandos para ambas opciones de instalación de bibliotecas de Python: pip y poetry.
Si estás utilizando pip para la instalación (por defecto):
python -m pip install pytest
python -m pip install pytest-mock
Si estás utilizando poetry para la instalación:
poetry add pytest
poetry add pytest-mock
2. ¿Qué es la Prueba Unitaria y la Pirámide de Pruebas?
La Prueba Unitaria es un método de prueba de software para probar la parte más pequeña de código que se puede aislar, es decir, una función (método).
El concepto de la Pirámide de Pruebas, como se muestra a continuación, fue introducido por Mike Cohn en su libro
Succeeding with Agile
. Define la estrategia de pruebas con una gran visualización, cubriendo los tres tipos principales de pruebas: pruebas unitarias, pruebas de integración y pruebas de extremo a extremo, y la proporción de cada una dentro de toda la estrategia de pruebas.
Según la pirámide, cuando está en la parte inferior normalmente significa pruebas más aisladas y rápidas (en otras palabras: más baratas); mientras se sube por la pirámide, significa pruebas más integradas y lentas (en otras palabras: más costosas). En la punta de la pirámide podría significar pruebas manuales. Por lo tanto, deberíamos cubrir el código con más pruebas unitarias automatizadas y menos pruebas manuales.
Pirámide de Pruebas
3. ¿Por qué necesitamos Pruebas Unitarias?
Las personas tienden a apresurarse en la entrega de la función solicitada pero ignoran la importancia de escribir casos de prueba. La ignorancia podría deberse a que lo ven como una pérdida de tiempo y no ven el daño que podría causar. Sin embargo, permíteme decirte los beneficios que te traerá escribir pruebas unitarias:
-
Identificar fácil y tempranamente los errores:
La prueba unitaria puede ayudarte a verificar lo que deseas desarrollar. Sin pruebas unitarias, terminarías atrapado arreglando errores aleatorios al ejecutar toda la aplicación. Y es posible que necesites pasar horas colocando puntos de interrupción y rastreando de dónde provienen.
-
Ayudarte a escribir un mejor código:
Si encuentras difícil escribir un caso de prueba para tu propio código, probablemente pensarías en refactorizar tu código.
-
Pruebas a bajo costo:
La prueba unitaria es la más rápida entre todos los casos de prueba, ya que elimina todas las dependencias.
-
Servir como documentación:
Las personas entenderán qué tipo de datos de entrada/salida, formato es cuando miran tus pruebas unitarias.
4. ¿Qué hace entonces una buena prueba unitaria?
A continuación se presentan las seis cualidades que harán una buena prueba unitaria. Cómo podemos lograr las primeras cuatro cualidades se cubren en las secciones siguientes.
Independiente
La prueba se centra en la función en sí misma y
NO
en todas las dependencias, que incluyen llamadas a API, conexiones a bases de datos, otras funciones de tu aplicación o bibliotecas de terceros. Todas las dependencias deben ser adecuadamente simuladas.
Se permiten múltiples afirmaciones solo si todas prueban una característica. Cuando una prueba falla, debería señalar la ubicación del problema.
Las pruebas deben estar aisladas --
no depender unas de otras
. No deberíamos hacer suposiciones sobre el orden de ejecución de las pruebas.
Rápido
El tiempo de respuesta de una buena prueba unitaria debería ser inferior a un segundo. Esta es también una forma buena y directa de evaluar su independencia. Cualquier prueba unitaria que tome más tiempo que eso debería