9.2. Pruebas unitarias

Son una técnica de depuración que se enfoca en validar el funcionamiento de unidades individuales de código, como funciones o métodos, de forma aislada. Su objetivo es asegurarse de que cada componente del software cumpla con su propósito específico, sin depender de otros módulos.

Al automatizar estas pruebas, los desarrolladores pueden detectar errores de manera temprana, mejorando la calidad del código y reduciendo los costos de corrección en etapas posteriores del desarrollo. Las pruebas unitarias son esenciales en el desarrollo ágil, ya que permiten realizar cambios rápidos y seguros en el código, garantizando que las modificaciones no afecten negativamente el funcionamiento del sistema.

Estas pruebas verifican el funcionamiento de las unidades más pequeñas de un programa, normalmente funciones o métodos individuales. El propósito es garantizar que cada unidad de código funcione correctamente de manera aislada antes de integrarse en el sistema completo.

9.2.1. Importancia

Son fundamentales para mejorar la calidad del software. Detectan errores en una etapa temprana del desarrollo, reducen costos de mantenimiento y proporcionan documentación sobre el comportamiento esperado del código. Además, permiten realizar cambios en el código sin miedo a introducir nuevos errores.

9.2.2. Herramientas populares

Existen varias herramientas populares para realizar pruebas unitarias:

Nombre

Licencia

Forma parte de

Categoría

Categoría Especial

doctest

Licencia MIT

librería estándar de Python.

Pruebas unitarias

Shell IPython para el símbolo del sistema y la aplicación inclusiva.

unittest

Licencia MIT

librería estándar de Python.

Pruebas unitarias

Coleccción rápida de pruebas y ejecución flexible de las mismas.

PyTest

Licencia MIT

Autónomo, permite suites de prueba compactas.

Pruebas unitarias

Clase especial y sencilla para facilitar las pruebas.

Robot

Licencia ASF

Librerías de pruebas genéricas de Python.

Pruebas de aceptación

Enfoque de pruebas basado en palabras clave.

Nose2

Licencia BSD

Lleva las características de unittest con características adicionales y plugins.

Extensión de unittest

Un gran número de plugins.

Testify

Licencia ASF

Lleva las características de unittest y nose2 con características adicionales y plugins.

Extensión de unittest

Mejora del descubrimiento de pruebas.

En este articulo se explicará como utilizar el módulo unittest, que es la librería estándar de Python para realizar pruebas unitarias.


9.2.3. Instalación

El módulo unittest esta incluida en librería estándar de Python, puede probar la instalación existe, ejecutando el siguiente comando:

python3 -c "import unittest ; print(unittest.__package__)"

Si muestra el nombre del módulo unittest, tiene correctamente instalado el módulo. Con esto, ya tiene todo listo para continuar.


9.2.4. Práctica - Caso real

A continuación se presenta una práctica más real de implementar el uso de proyectos con unittest, a continuación la estructura de proyecto llamado unitarias:

9.2.4.1. Estructura de archivos

Para crear la estructura de archivos del proyecto unittest debe ejecutar los siguientes comandos:

Crear y acceder al directorio unitarias en un solo comando, ejecutando el siguiente comando:

mkdir -p ~/proyectos/pruebas/unitarias && cd $_

El comando anterior crea la siguiente estructura de directorios:

proyectos/
└── pruebas/
    └── unitarias/

Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.

A continuación se presenta y explica el uso de cada archivo para este proyecto:

Archivo operations.py

Módulo de funciones operativas del programa.

1
2
3
4
5
6
7
8
"""Operations functions module"""


def total_sum(cost, current_value):
    return cost + current_value


print(f"📜 The total sum is: {total_sum(1, 2)}")

Archivo test_operations.py

Módulo de pruebas unitarias funciones operativas del programa.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
"""Unit test using unittest for operations.py module"""

import unittest
from operations import total_sum


class TestSumFunction(unittest.TestCase):
    """Unit test of total_sum function"""

    def test_total_sum_positive(self):
        """Test total sum positive"""
        self.assertEqual(total_sum(1, 2), 3)

    def test_total_sum_negative(self):
        """Test total sum negative"""
        self.assertEqual(total_sum(-2, -3), -5)


if __name__ == "__main__":
    unittest.main()

Para ejecutar el código del proyecto llamado unitarias abra una consola de comando, cree la siguiente estructura de directorio y acceda al mismo donde se encuentra el programa:

proyectos/
└── pruebas/
    └── unitarias/
        ├── __init__.py
        ├── operations.py
        └── test_operations.py

Si tiene la estructura de archivo previa, entonces puede continuar los procesos de ejecución del código fuente.


Teniendo creada la anterior estructura de proyecto, vuelva a ejecutar ahora el módulo con el siguiente comando, el cual a continuación se presentan el correspondiente comando de tu sistema operativo:

Truco

Para ejecutar el código fuente de esta práctica debe invocar al módulo operations.py, abra una consola de comando, acceda al directorio donde se encuentra la estructura previa y ejecute el siguiente comando:

python3 operations.py

El anterior código al ejecutar debe mostrar el siguiente mensaje:

📜 The total sum is: 3

Este es el funcionamiento normal del módulo operations.py. Por defecto siempre devolvera el valor 3.

Este código crea una prueba unitaria para la función total_sum, evalúa que el valor 3 sea el resultado esperado.

Truco

Para ejecutar el código fuente de esta práctica debe invocar al módulo test_operations.py, abra una consola de comando, acceda al directorio donde se encuentra la estructura previa y ejecute el siguiente comando:

python3 test_operations.py

El anterior código al ejecutar debe mostrar el siguiente mensaje:

📜 The total sum is: 3
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Si la ejecución anterior muestra el mensaje anterior, quiere decir que la prueba unitaria fue exitosa.

Así de esta forma puede replicar una práctica real de un proyecto para realizar pruebas unitareas usando unittest para el módulo operations.py, aplicando buenas prácticas de código funcional.

Importante

Usted puede descargar el código usado en esta sección haciendo clic en los siguientes enlaces:

Las pruebas unitarias son una parte esencial del desarrollo de software. Implementarlas de manera adecuada ayuda a garantizar la calidad, estabilidad y mantenibilidad del código. Con herramientas como unittest en Python, los desarrolladores pueden escribir pruebas de manera sencilla y efectiva.


Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.


¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. UTM - Madrid, España.

La hora aquí es actualmente 7:35 PM UTM.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional