UnitTest: el framework de pruebas integrado de Python

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción al testing con unittest

El testing es una parte fundamental del desarrollo de software, ya que garantiza la fiabilidad y calidad del código. En el ecosistema de Python, el módulo unittest se presenta como la solución estándar para crear y ejecutar pruebas automatizadas.

UnitTest es una biblioteca integrada de Python, basada en la arquitectura xUnit, que ofrece a los desarrolladores un conjunto completo de herramientas para crear pruebas unitarias, verificar la lógica de negocio y controlar el funcionamiento de funciones y clases. Su principal ventaja es que forma parte de la biblioteca estándar de Python, por lo que no requiere instalaciones adicionales.

¿Qué es unittest y para qué sirve?

Unittest es un framework para escribir y ejecutar pruebas en Python que sigue los principios del desarrollo guiado por pruebas (TDD). Permite crear pruebas repetibles, aisladas y automatizadas que ayudan a:

  • Detectar errores en etapas tempranas del desarrollo
  • Garantizar la estabilidad del código durante refactorizaciones
  • Documentar el comportamiento esperado de las funciones
  • Aumentar la confianza en la calidad del producto final

Fundamentos de unittest

Estructura básica de una prueba

Para empezar a usar unittest, primero debes importar el módulo y crear una clase de prueba:

import unittest

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(2 + 3, 5)
        
    def test_multiply(self):
        self.assertEqual(4 * 5, 20)

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

Principios clave de la estructura

Cada clase de prueba debe heredar de unittest.TestCase. Todos los métodos de prueba comienzan con el prefijo test_, lo que permite al framework detectarlos y ejecutarlos automáticamente. El método unittest.main() ejecuta todas las pruebas encontradas en el módulo actual.

Ciclo de vida de las pruebas y fixtures

Métodos de configuración y limpieza

Unittest proporciona métodos especiales para preparar y limpiar el entorno de pruebas:

class TestDatabase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        """Se ejecuta una vez antes de todas las pruebas de la clase"""
        cls.db_connection = create_test_database()
    
    @classmethod
    def tearDownClass(cls):
        """Se ejecuta una vez después de todas las pruebas de la clase"""
        cls.db_connection.close()
    
    def setUp(self):
        """Se ejecuta antes de cada prueba"""
        self.test_data = ["item1", "item2", "item3"]
    
    def tearDown(self):
        """Se ejecuta después de cada prueba"""
        self.test_data.clear()

Niveles de fixtures

Las fixtures en unittest funcionan en diferentes niveles:

  • setUp() y tearDown() - para cada prueba individual
  • setUpClass() y tearDownClass() - para toda la clase de prueba
  • setUpModule() y tearDownModule() - para todo el módulo

Métodos de aserción (Assertions)

Métodos de verificación principales

Unittest ofrece un amplio conjunto de métodos para diferentes tipos de comprobaciones:

Método Descripción Ejemplo de uso
assertEqual(a, b) Verifica que a y b sean iguales self.assertEqual(2+2, 4)
assertNotEqual(a, b) Verifica que a y b no sean iguales self.assertNotEqual(2+2, 5)
assertTrue(x) Verifica que x sea verdadero self.assertTrue(5 > 3)
assertFalse(x) Verifica que x sea falso self.assertFalse(5 < 3)

Recommendations