Pruebas Unitarias en Python con pytest

Pruebas Unitarias en Python con pytest

Las pruebas unitarias son una parte fundamental del desarrollo de software. Permiten verificar que cada parte de un programa funciona correctamente antes de que se integre con el resto del código.

En Python, existen varios frameworks para realizar pruebas unitarias. Uno de los más populares es pytest. pytest es un framework flexible y fácil de usar que proporciona una amplia gama de características para escribir pruebas unitarias.

Instalación de pytest

Para instalar pytest, podemos usar el siguiente comando:

pip install pytest

Ejemplo de prueba unitaria

Para crear una prueba unitaria con pytest, debemos crear un archivo con la extensión .py que contenga una función con el decorador @pytest.mark.test.

Python
# test_suma.py

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

@pytest.mark.test
def test_suma_iguales():
    assert suma(1, 1) == 2

Este ejemplo crea una prueba unitaria para la función suma(). La prueba verifica que la función suma() devuelva el valor correcto cuando los dos argumentos son iguales.

Para ejecutar la prueba unitaria, podemos usar el siguiente comando:

pytest test_suma.py

Si la prueba se ejecuta correctamente, se mostrará el siguiente mensaje:

PASSED test_suma_iguales (0.00s)

Estructura de las pruebas unitarias

Las pruebas unitarias en pytest se organizan en clases. Cada clase de prueba debe heredar de la clase unittest.TestCase.

Python
# test_suma.py

from unittest import TestCase

class TestSuma(TestCase):

    def test_suma_iguales(self):
        assert suma(1, 1) == 2

    def test_suma_distintos(self):
        assert suma(1, 2) == 3

En este ejemplo, la clase TestSuma() contiene dos pruebas unitarias: test_suma_iguales() y test_suma_distintos().

Marcadores de pruebas

Los marcadores de pruebas son una forma de organizar y clasificar las pruebas unitarias. Los marcadores se pueden usar para agrupar pruebas, marcarlas como bloqueadas o como pruebas de rendimiento, etc.

Python
# test_suma.py

from unittest import TestCase

@pytest.mark.fast
class TestSuma(TestCase):

    def test_suma_iguales(self):
        assert suma(1, 1) == 2

    def test_suma_distintos(self):
        assert suma(1, 2) == 3

En este ejemplo, la prueba test_suma_iguales() está marcada con el marcador @pytest.mark.fast. Esto indica que la prueba es rápida y se puede ejecutar con frecuencia.

Excepciones

pytest puede capturar excepciones que se producen durante la ejecución de una prueba. Esto permite escribir pruebas unitarias que verifiquen que un código se comporta correctamente en caso de error.

Python
# test_suma.py

from unittest import TestCase

class TestSuma(TestCase):

    def test_suma_incorrecta(self):
        with pytest.raises(TypeError):
            suma("hola", "mundo")

En este ejemplo, la prueba test_suma_incorrecta() verifica que la función suma() lanza una excepción TypeError si se le pasan argumentos de tipos incorrectos.

Resumen

Pruebas unitarias son una parte fundamental del desarrollo de software. En este tutorial, hemos aprendido a escribir pruebas unitarias con pytest.

Para obtener más información sobre pytest, puede consultar la documentación oficial: https://docs.pytest.org/en/latest/.