No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Cómo Crear Pruebas Unitarias con UnitTest en Python

4/20
Recursos

Las pruebas unitarias en Python son esenciales para asegurar el correcto funcionamiento del código. Utilizando la clase TestCase de la biblioteca UnitTest, podemos estructurar pruebas de manera eficiente y limpiar recursos una vez que se han ejecutado. Además, permite automatizar la validación de resultados y la captura de errores. Vamos a profundizar en cómo implementar estas pruebas y algunos métodos clave que facilitan este proceso.

¿Cómo configurar las pruebas en Python con TestCase?

El método setUp() nos permite configurar elementos antes de que cada prueba se ejecute. Imagina que tienes cinco pruebas que requieren la misma preparación: en lugar de repetir la configuración, puedes ejecutarla una sola vez aquí. Esto ahorra tiempo y esfuerzo al evitar la duplicación de código.

Por ejemplo:

  • Puedes utilizar setUp() para crear una base común de datos, abrir archivos, o preparar datos de entrada.
  • Luego, cada prueba reutiliza esta configuración, asegurando que el entorno siempre esté listo para las pruebas.

¿Cómo limpiar después de una prueba?

El método tearDown() sirve para limpiar los recursos utilizados en la prueba. Supongamos que has creado cientos de archivos para una prueba, este método permite eliminarlos automáticamente después de que la prueba finaliza, asegurando que el sistema no quede lleno de datos innecesarios.

Algunos ejemplos de cuándo usarlo:

  • Eliminar archivos temporales creados durante las pruebas.
  • Cerrar conexiones a bases de datos o liberar recursos del sistema.

¿Cómo ejecutar pruebas y capturar errores?

La clase TestCase no solo organiza las pruebas, también proporciona un método automático para ejecutar cada una de ellas. El método runTest() gestiona la ejecución de las pruebas, captura los errores y valida que todo funcione correctamente. Este proceso automatiza la validación de resultados esperados y la identificación de fallos.

Por ejemplo:

  • Si tienes una lista de pruebas, este método las ejecutará una por una, asegurando que todas se validen correctamente.
  • Además, capturará las excepciones que se lancen durante la ejecución.

¿Cómo validar excepciones en las pruebas unitarias?

Una situación común en las pruebas de una calculadora es manejar la división por cero. La mejor práctica es lanzar una excepción para evitar errores. Python permite validar que la excepción se ha lanzado correctamente en las pruebas.

Pasos clave:

  • Crear una prueba donde b = 0.
  • Utilizar assertRaises() para verificar que se ha lanzado la excepción ValueError.

Aportes 8

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Les comparto mis pruebas unitarias para la multiplicacion, división y división por cero ```python def test_multiplication(self): assert multiplication(2, 4) == 8 def test_division(self): assert division(30, 2) == 15 def test_division_by_zero(self): with self.assertRaises(ZeroDivisionError): division(30, 0) ```![](https://static.platzi.com/media/user_upload/Captura%20desde%202024-09-06%2021-27-52-fee7acbb-84f8-4443-8e8b-38fd53805680.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20desde%202024-09-06%2021-27-41-0a982915-46b0-4676-b512-9069feee2328.jpg)
Creo que unittest cambio, puesto que assert no me funciona a mi me funciona asi def test\_sum(self):        self.assertEqual(sum(2, 3), 5)        con assertEqual(sum(a, b), c)
Me resultaba aburrido lanzar una excepción de dividir por cero, así que implementé una solución matemática conocida, la división por 0 arroja infinitos con el signo del numerados, y la división de cero entre cero arroja un None (null, NA en otros lenguajes. ![](https://static.platzi.com/media/user_upload/upload-b66b5b49-2830-4535-94d8-ad0cd6a61a0e.png) ![](https://static.platzi.com/media/user_upload/upload-e26749dc-a9b3-4ae6-a0a6-a8b3c2c74bcc.png)
![](https://static.platzi.com/media/user_upload/%7BFDFC00DF-8FC7-49BD-99E6-BCCBA7924AA4%7D-5df2565a-c0e2-41d4-89ee-d5ca9e34567f.jpg)
Acá van mis aportes: import unittest from src.calculator import add, subs, mult, div class CalculatorTests(unittest.TestCase):     def test\_add(self):        assert add(2,3) == 5     def test\_subs(self):        assert subs(10,3) == 7     def test\_mult(self):        assert mult(3,6) == 18     def test\_div(self):        assert div(18,3) == 6 Y acávan mis funciones: def add(a,b):    return a+b def subs(a,b):    return a-b def mult(a,b):    return a\*b def div(a,b):    return a/b Burdo, sencillo, pero funcional.
Hasta ahora todo bien, se entiende lo que explica, pero me parece que le falta meter ejemplos de la teoría que explica, por ejemplo, mostró en la docu los métodos setUp() y tearDown() y explicó para qué son, pero no los utilizó en ningun momento.
No sé si estará bien, leyendo la documentación para poder validar el ValueError de la división por cero como hizo el profe lo hice con "assertRaisesRegex": ```js def test_divide_with_zero(self): with self.assertRaisesRegex(ValueError, "The division by zero is not allowed"): divide(15, 0) ```def test\_divide\_with\_zero(self):        with self.assertRaisesRegex(ValueError, "The division by zero is not allowed"):            divide(15, 0)
```python def test_div_by_zero(self): with self.assertRaises(ZeroDivisionError): division(3, 0) ```