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.
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.
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()
unittest
Para ejecutar las pruebas, simplemente ejecuta el archivo de prueba desde la línea de comandos:
python nombre_del_archivo_de_prueba.py
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.
pytest
Primero, necesitas instalar pytest si no lo tienes:
pip install pytest
pytest
1. Crear funciones de prueba que comiencen con test_.
2. Utilizar aserciones estándar de Python.
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
pytest
Para ejecutar las pruebas, simplemente ejecuta el comando pytest en el directorio que contiene tu archivo de prueba:
pytest
pytest
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
@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
pytest tiene un ecosistema robusto de plugins que pueden extender su funcionalidad.
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.
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.
Jorge García
Fullstack developer