0% encontró este documento útil (0 votos)
43 vistas27 páginas

Testing

Este documento introduce los conceptos básicos de testing en Python, comparando las herramientas doctest y unittest. Explica que el testing permite validar el código y mejorar su calidad, y que existen múltiples frameworks para automatizar pruebas en Python.

Cargado por

Ian Sena
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas27 páginas

Testing

Este documento introduce los conceptos básicos de testing en Python, comparando las herramientas doctest y unittest. Explica que el testing permite validar el código y mejorar su calidad, y que existen múltiples frameworks para automatizar pruebas en Python.

Cargado por

Ian Sena
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 27

Introducción al Testing en

Python

- Ing. Skrauba Axel


1. Introducción al testing
El testing de software se
refiere al proceso de evaluar
y verificar el código de un
programa para detectar
errores y defectos.

Ayuda a validar que el código


funciona según lo esperado y se
encuentren bugs antes de que los
usuarios los encuentren.
Testing: generalidades
▪ Permite verificar que el código hace lo
que debería hacer según su
especificación y requerimientos.
▪ Mejora la calidad del software y reduce
el esfuerzo de mantenimiento a futuro.
▪ La automatización de las pruebas
permite ejecutar tests repetidamente y
obtener feedback rápido ante cualquier
cambio.
Testing: generalidades
En Python existen múltiples frameworks y
herramientas para implementar pruebas
automatizadas, como unittest, pytest,
doctest, mock…

▪ Nos enfocaremos en doctest y unittest,


dos de las herramientas más comunes
para testing en Python.
Testing: beneficios
▪ Nos obliga a pensar en la especificación y el diseño
antes de codear.
▪ Permite probar a fondo todos los casos de uso.
▪ Da retroalimentación rápida sobre la calidad y
efectos de los cambios.
▪ Facilita el refactoring y la reutilización de código.
▪ Reduce la necesidad de testing manual repetitivo.
▪ Da confianza para modificar y mantener el código
en el futuro.
2. Doctests
Los doctests son una forma simple de
escribir casos de prueba utilizando el
intérprete interactivo de Python dentro
de la documentación.

Permiten testear código directamente


en los comentarios y docstrings de las
funciones, módulos, etc.
https://docs.python.org/3/library/doctest.html
Doctests: generalidades
▪Se escribe como una ▪La sintaxis básica dentro
sesión interactiva de de un docstring es:
Python, con inputs y
outputs esperados.
▪El framework doctest
ejecuta el código y
compara los resultados
con los provistos en los
ejemplos.
Doctests: generalidades
Ventajas de doctest: ▪Para ejecutar los doctests
se importa el módulo
▪Fácil de escribir tests junto doctest y se llama a
al código. testmod()
▪Sirve como documentación Esto busca los doctests, los ejecuta
y ejemplos de uso. y reporta los que fallaron.
▪Se integran en el flujo
normal de desarrollo.
Doctests: generalidades
Limitaciones:
▪Solo puede testear el caso feliz,
errores o excepciones de manera
limitada solamente.
▪Dependen de los strings
hardcodeados, frágiles a cambios.
▪Menos features que frameworks de
testing dedicados.
Doctests: ejemplo
▪En este caso el doctest demuestra
cómo usar la función promedio()
pasándole diferentes argumentos y
mostrando el resultado esperado.
▪Verifica que la función retorna el
cálculo correcto del promedio para
estos casos de prueba. Pero no
valida manejo de errores, tipos de
datos u otros casos más complejos.
Doctests: ejemplo
3. Unittest
Unittest es un framework incorporado
en la biblioteca estándar de Python
para realizar pruebas unitarias.

Permite organizar los tests en clases y


métodos separados del código de
producción.

https://docs.python.org/3/library/unittest.html
Unittest : generalidades
Características principales:
▪ Los casos de prueba se definen en clases que
heredan de unittest.TestCase
▪ Cada método de prueba debe comenzar con test_
para que se ejecute
▪ setUp() y tearDown() permiten ejecutar código
antes y después de cada método de prueba
▪ Se utilizan métodos assertX() para verificar
resultados esperados
▪ Para ejecutar las pruebas se llama a unittest.main()
Unittest : ejemplo
▪ Las afirmaciones (asserts) son
una forma de validar que ciertas
condiciones se cumplen en el
código. Sirven para detectar bugs
y fallas lo antes posible.
▪ Se utilizan dentro de funciones y
métodos para verificar los
valores de entrada, salida o el
estado del programa.
Unittest : ejemplo (asserts)
La sintaxis básica es: Ejemplo:

▪ Donde condition es una


▪ Esto permite detectar casos inválidos y lanzar
expresión booleana que se excepciones explícitas.
espera sea True. ▪ Se considera mejor práctica que escribir
▪ Si la condición es False, se manualmente Raises ValueError/TypeError,
etc.
levanta una AssertionError con el ▪ En testing, asserts verifican los
mensaje dado. resultados actuales vs los esperados.
Unittest : ejemplo (asserts)

https://ellibrodepython.com/assert-python
Unittest : ejemplo (asserts)
Para los unittest existen
asserts especializados:
▪ assertEqual(a, b): Verifica que
a == b. Útil para confirmar que
una función retorna el
resultado esperado.
▪ assertNotEqual(a, b): Opuesto
a assertEqual, verifica que a !=
b. Sirve para confirmar que
dos valores son distintos
Unittest : ejemplo (asserts)
▪ assertIs(a, b): Confirma ▪ assertIsNotNone(x): Revisa
que a es b (verifica que que x no es None.
son el mismo objeto). ▪ assertIn(a, b): Verifica que a
▪ assertIsNot(a, b): Verifica está en b (b puede ser una
que a no es b. lista, tupla, diccionario, etc.).
▪ assertIsNone(x): Confirma ▪ assertNotIn(a, b): Lo opuesto,
que x es None. confirma que a no está en b…

Estos asserts cubren una amplia gama de casos para comparar valores
y validar resultados/condiciones esperadas en los tests.
Unittest : ejemplo
Unittest : ejemplo
Unittest : beneficios
▪Tests independientes y repetibles.
▪Múltiples casos de prueba.
▪Tests más completos (casos felices y errores).
▪Integración con herramientas de CI.

unittest es más completo y robusto que doctest para


pruebas automatizadas. Requiere más código pero
brinda mayor control y flexibilidad.
4. Buenas prácticas
▪ Escribir tests pequeños y aislados, que
validen una única pieza de funcionalidad.
▪ Probar tanto el caso feliz como los casos
errores y excepciones esperadas.
▪ Los tests también sirven como
documentación y especificación del
sistema.
▪ No ignorar o postergar el testing, es una
inversión que ahorra esfuerzo a futuro y
brinda tranquilidad.
5. Ejercicios
▪Dada una función, escribir
doctests que prueben los casos
esperados.
▪Escribir una nueva función con
TDD (Test Driven Development):
tests primero y luego código.
Extra: Unittest más ejemplos
Extra: Unittest más ejemplos
Extra: Unittest más ejemplos
Preguntas…

•Dudas
•Sugerencias
•Cuestiones
•Vamos al código…

También podría gustarte