Contenido del curso

Suites y runners de unittest en Python

Resumen

Ejecutar pruebas desde la terminal funciona bien mientras desarrollas, pero cuando entras a un entorno de producción o de continuous integration necesitas más control. Con las test suites de Python y unittest puedes agrupar pruebas, ejecutarlas de forma selectiva y dejar de depender del descubrimiento automático que corre todo de una vez.

¿Qué es una suite de pruebas en unittest y para qué sirve?

Una suite es simplemente un grupo de pruebas. En proyectos pequeños sueles tener una sola y al ejecutarla corren todos los tests. Pero su verdadero valor aparece cuando modularizas: imagina correr únicamente las pruebas de la calculadora o solo las del banco, sin tocar el resto.

El comando que veníamos usando, python -m unittest discover, crea una suite automáticamente recorriendo una carpeta y buscando archivos que cumplan un patrón. Cómodo, sí, pero poco selectivo [01:05].

¿Qué hace unittest discover? Recorre una carpeta, encuentra los archivos que empiezan con test_ y arma una suite con todas las pruebas que encuentre, ejecutándolas de corrido.

¿Cómo creo una suite manualmente paso a paso?

Para entender qué hace discover por debajo, conviene crear una suite a mano. El flujo es así:

  • Crea un archivo, por ejemplo tests_suites.py, e importa unittest [02:10].
  • Define una función como bank_account_suite() que retorne la suite.
  • Instancia la clase con suite = unittest.TestSuite().
  • Agrega pruebas con suite.addTest(BankAccountTests('test_deposit')) pasándole el nombre del método a ejecutar.
  • Repite addTest por cada prueba que quieras incluir, como test_withdraw.

Una suite sola no ejecuta nada. Necesita un runner, que es quien recorre las pruebas una por una y genera el output que ves en la terminal.

¿Qué es un test runner y cómo lo configuro?

Un runner toma la suite y ejecuta cada prueba. unittest trae varios; el más común es TextTestRunner, que imprime resultados en texto plano.

Para usarlo dentro de tu archivo, instancia y ejecuta:

python if name == 'main': runner = unittest.TextTestRunner() runner.run(bank_account_suite())

Al correrlo por primera vez aparecen errores típicos que vale la pena resolver con calma [04:30]:

  • Module is not a package: la carpeta test necesita un archivo __init__.py para ser tratada como paquete.
  • No module named src: cuando ejecutas desde otra ubicación, Python no encuentra tu código fuente. La solución es agregar __init__.py en src y exportar la variable PYTHONPATH=. antes del comando.
  • Imports redundantes: si ya estás dentro de la carpeta test, importa la clase directamente sin el prefijo del paquete.

Después del ajuste, el runner ejecuta exactamente las dos pruebas que registraste con addTest, ni una más [05:50].

¿Para qué sirve PYTHONPATH al correr tests? Le indica a Python desde qué directorio buscar tus módulos. Usar PYTHONPATH=. significa: busca desde la carpeta donde estoy parado ahora.

¿Cómo ejecuto una prueba específica desde la terminal?

No siempre necesitas crear una suite. unittest acepta rutas directas a una prueba puntual. La sintaxis es:

bash python -m unittest tests.test_calculator.CalculatorTest.test_sum

Si quitas el último segmento, corres todas las pruebas de la clase. Si quitas dos, corres todo el archivo. Es un truco rápido cuando estás depurando un caso aislado y no quieres esperar a que se ejecute la suite completa.

¿Cómo ejecuto pruebas con un clic desde Visual Studio Code?

Visual Studio Code trae su propio runner integrado. Al activarlo te pide dos cosas:

  1. El framework que usas: unittest o PyTest.
  2. La carpeta donde viven las pruebas.
  3. El patrón de nombres, en este caso test_*.py.

Un detalle importante: el archivo donde definiste tu suite manual también empieza con test_, lo que confunde al descubridor de VS Code. Renómbralo a algo como suites_runner.py para que el patrón no lo capture [08:15].

Una vez configurado, aparece la lista completa de pruebas en el panel lateral. Puedes:

  • Ejecutar una prueba individual con un clic.
  • Ver un check mark verde si pasa.
  • Identificar pruebas marcadas con skip mediante un ícono distinto.
  • Abrir el botón Show Output para leer errores cuando las pruebas no se descubren.

Esto convierte el ciclo de feedback en algo mucho más ágil que estar escribiendo comandos largos cada vez que cambias una línea.

¿Cuándo conviene usar suites manuales y cuándo autodiscover?

La respuesta corta: depende del momento. Mientras desarrollas, autodiscover y el runner de VS Code te dan velocidad. En continuous integration o cuando quieres agrupar pruebas por categoría, área del negocio o prioridad, las suites manuales te dan control fino.

Puedes crear una suite para smoke tests, otra para pruebas lentas de integración y otra para regresiones. Así decides qué corre en cada pipeline sin ejecutar todo el universo de pruebas.

Ahora te toca a ti: crea varias suites, agrúpalas por categoría o por orden cronológico, ejecútalas y comparte en los comentarios cómo organizaste tus pruebas.