Volver a la página principal
martes 16 julio 2024
13

Cómo hacer pruebas unitarias en Python

Introducción a unittest

unittest es el módulo de pruebas unitarias incorporado en la biblioteca estándar de Python. Proporciona una forma estructurada de escribir y ejecutar pruebas.

Estructura Básica de una Prueba con unittest

1. Importar el módulo unittest.

2. Crear una clase de prueba que herede de unittest.TestCase.

3. Definir métodos dentro de la clase de prueba que comiencen con test_.

4. Utilizar métodos de aserción para verificar los resultados esperados.

Ejemplo Básico

Supongamos que tenemos una función simple suma que queremos probar:

def suma(a, b):
    return a + b

Podemos escribir una prueba unitaria para esta función de la siguiente manera:

import unittest

class TestSuma(unittest.TestCase):

    def test_suma_positivos(self):
        self.assertEqual(suma(1, 2), 3)

    def test_suma_negativos(self):
        self.assertEqual(suma(-1, -1), -2)

    def test_suma_positivo_negativo(self):
        self.assertEqual(suma(1, -1), 0)

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

Ejecutar Pruebas con unittest

Para ejecutar las pruebas, simplemente ejecuta el archivo de prueba desde la línea de comandos:

python nombre_del_archivo_de_prueba.py

Introducción a pytest

pytest es una herramienta de pruebas más poderosa y flexible que unittest. Es especialmente útil para proyectos grandes y complejos, y tiene una sintaxis más simple y concisa.

Instalación de pytest

Primero, necesitas instalar pytest si no lo tienes:

pip install pytest

Estructura Básica de una Prueba con pytest

1. Crear funciones de prueba que comiencen con test_.

2. Utilizar aserciones estándar de Python.

Ejemplo Básico

Usando la misma función suma, podemos escribir pruebas con pytest de la siguiente manera:

def suma(a, b):
    return a + b

def test_suma_positivos():
    assert suma(1, 2) == 3

def test_suma_negativos():
    assert suma(-1, -1) == -2

def test_suma_positivo_negativo():
    assert suma(1, -1) == 0

Ejecutar Pruebas con pytest

Para ejecutar las pruebas, simplemente ejecuta el comando pytest en el directorio que contiene tu archivo de prueba:

pytest

Características Avanzadas de pytest

  • Fixtures: pytest proporciona fixtures que son funciones reutilizables para configurar y limpiar datos de prueba.
import pytest

@pytest.fixture
def datos():
    return 1, 2

def test_suma_con_datos(datos):
    a, b = datos
    assert suma(a, b) == 3
  • Marcadores: Puedes usar marcadores para categorizar y filtrar pruebas.
@pytest.mark.lento
def test_prueba_lenta():
    # código de prueba que toma tiempo
    pass

# Ejecutar solo las pruebas marcadas como "lento"
pytest -m lento
  • Plugins: pytest tiene un ecosistema robusto de plugins que pueden extender su funcionalidad.

Mejores Prácticas

1. Escribe pruebas pequeñas y enfocadas: Cada prueba debe enfocarse en una pequeña parte del código.

2. Nombra tus pruebas descriptivamente: Usa nombres que describan lo que la prueba está verificando.

3. Usa fixtures para datos repetitivos: Esto hace que tus pruebas sean más limpias y fáciles de mantener.

4. Ejecuta pruebas frecuentemente: Integrar las pruebas en tu flujo de trabajo de desarrollo te ayuda a detectar errores temprano.

Conclusión

Las pruebas unitarias son esenciales para mantener la calidad y la fiabilidad de tu código. Tanto unittest como pytest son herramientas poderosas para escribir y ejecutar pruebas en Python. unittest es ideal para proyectos pequeños o para quienes prefieren una solución incorporada, mientras que pytest ofrece una mayor flexibilidad y características avanzadas que pueden beneficiar a proyectos más grandes y complejos.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer