Introducción
Las pruebas unitarias son una parte esencial de la creación de software robusto y fácil de mantener. Al escribir pruebas para unidades individuales de código, te aseguras de que tus funciones se comportan como se espera y puedes detectar errores en una fase temprana del proceso de desarrollo. En esta guía, le presentaremos pytest, un potente marco de pruebas para Python, y le mostraremos cómo escribir pruebas, adoptar prácticas de desarrollo basado en pruebas (TDD) e incorporar ejemplos del mundo real a su flujo de trabajo.
¿Por qué las pruebas unitarias y el TDD?
Las pruebas le ayudan a detectar errores de forma temprana y le dan la confianza necesaria para refactorizar el código sin romper la funcionalidad. El desarrollo basado en pruebas (TDD) va más allá y escribe las pruebas antes que el código, lo que guía el diseño y garantiza una base de código robusta.
Primeros pasos con pytest
Instalación de pytest
Para empezar, instale pytest con pip:
pip install pytest
Escribir tu primera prueba
Creemos una función sencilla y escribamos una prueba para ella. Supongamos que tenemos una función add
:
def add(a, b):
return a + b
Ahora, cree una prueba para esta función:
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
Para ejecutar la prueba, ejecute pytest
en su terminal.
Desarrollo basado en pruebas (TDD) con pytest
El TDD consiste en escribir pruebas antes de escribir el código. He aquí un flujo de trabajo sencillo:
- Escribe una prueba que defina el comportamiento deseado de una función.
- Ejecuta la prueba para ver si falla.
- Escriba el código mínimo necesario para pasar la prueba.
- Refactoriza el código si es necesario y repite.
Ejemplo: flujo de trabajo TDD
Supongamos que necesitamos una función multiply
que multiplique dos números. Empezamos escribiendo una prueba:
def test_multiply():
assert multiply(3, 4) == 12
assert multiply(-2, 5) == -10
Ejecuta pytest y verás que la prueba falla porque multiply
no está definido. Ahora, implementa la función:
def multiply(a, b):
return a * b
Vuelva a ejecutar pytest para asegurarse de que la prueba se supera.
Funciones avanzadas de pytest
Pruebas parametrizadas
pytest le permite ejecutar una función de prueba con diferentes conjuntos de entradas utilizando el decorador @pytest.mark.parametrize
.
#| label: parameterized-tests, code-fold: true
import pytest
@pytest.mark.parametrize("a,b,expected", [
2, 3, 6),
(5, 5, 25),
(-1, 8, -8),
(
])def test_multiply_param(a, b, expected):
assert multiply(a, b) == expected
Fixtures en pytest
Los accesorios de pytest
te permiten configurar los datos o el estado antes de ejecutar las pruebas y limpiarlos después.
import pytest
@pytest.fixture
def sample_data():
return [1, 2, 3, 4, 5]
def test_sum(sample_data):
assert sum(sample_data) == 15
Prácticas recomendadas para pruebas unitarias
- Escribir pruebas para cada función:
Asegúrese de que cada unidad de su código tenga las pruebas correspondientes. - Mantener las pruebas independientes:
Las pruebas no deben depender unas de otras; cada prueba debe configurar su propio contexto. - Usa nombres de prueba descriptivos:
Asigne nombres claros a las funciones de prueba para que sea fácil diagnosticar los fallos. - Aproveche los accesorios y la parametrización:
Utilice estas funciones para escribir pruebas más limpias y eficientes. - Ejecutar pruebas con frecuencia:
Integra las pruebas en tu proceso de desarrollo para detectar problemas de forma temprana.
Conclusión
Al adoptar pytest y las prácticas de TDD, puede crear un conjunto de pruebas robusto que mejora la calidad y la fiabilidad del código. Esta guía le ha presentado los conceptos básicos para escribir pruebas, crear fixtures, parametrizar pruebas y seguir flujos de trabajo TDD en Python. Con estas herramientas, estarás mejor equipado para mantener y escalar tus proyectos.
Lecturas adicionales
- Automatización en Python: programación y automatización de tareas
- Creación de API REST con FastAPI: un marco moderno de Python
Disfruta de las pruebas y de la creación de aplicaciones Python fiables con pytest!
Explorar más artículos
Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.
Reutilización
Cómo citar
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Pruebas unitarias en Python con pytest: una guía completa},
date = {2024-02-08},
url = {https://www.datanovia.com/es/learn/programming/python/tools/pytest-unit-testing.html},
langid = {es}
}