Python Advanced Series — Testing / CI-CD

18. Pruebas unitarias para limpieza

18. Unit Tests for Data Cleaning

Escribe scripts con Pytest que verifiquen que futuras modificaciones en tu código no rompan la lógica del negocio.

Write Pytest scripts that verify future code changes do not break business logic.

⚠️ Advertencia de ciberseguridad y producción ⚠️ Cybersecurity and production warning

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos reales, ambientes de producción, APIs externas, portales con login, datos sensibles, sistemas críticos o repositorios empresariales sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios y cumplimiento de los protocolos de ciberseguridad de tu organización.

This exercise is for learning and testing only. Do not run scripts against real data, production environments, external APIs, login portals, sensitive data, critical systems, or enterprise repositories without authorization, backups, prior testing, least-privilege permissions, change control, and compliance with your organization's cybersecurity protocols.

Objetivo del ejercicio

Exercise objective

Crear una función de limpieza y una prueba unitaria que valide el resultado esperado antes de mover cambios.

Create a cleaning function and a unit test that validates the expected result before moving changes forward.

Datos sintéticos

Synthetic data

inputexpected
$1,500.501500.50
250 250.00
N/ANone

Ejemplo base

Base example

import pytest

# Terminal: pytest test_limpieza.py
def test_limpiar_moneda():
    assert limpiar_precio("$1,500.50") == 1500.50

Resultado esperado

Expected result

testresult
test_limpiar_monedapassed
test_blank_valuepassed

Script completo

Complete script

# ==========================================================
# Python Advanced Topic 18
# Unit Tests for Data Cleaning with Pytest
# ==========================================================

# pip install pytest

# Save this file as: test_limpieza.py

def limpiar_precio(valor):
    if valor is None:
        return None
    texto = str(valor).strip()
    if texto in ["", "N/A", "NA"]:
        return None
    texto = texto.replace("$", "").replace(",", "")
    return float(texto)

def test_limpiar_moneda():
    assert limpiar_precio("$1,500.50") == 1500.50

def test_limpiar_espacios():
    assert limpiar_precio(" 250 ") == 250.00

def test_limpiar_nulos():
    assert limpiar_precio("N/A") is None

# Terminal:
# pytest test_limpieza.py

Salida esperada en consola

Expected console output

============================= test session starts =============================
collected 3 items

test_limpieza.py ...                                                   [100%]

============================== 3 passed in 0.02s ==============================

Aplicaciones reales

Real-world applications

  • Proteger funciones de limpieza.
  • Automatizar validaciones antes de cambios.
  • Documentar reglas de negocio como pruebas.
  • Preparar CI/CD para procesos de datos.
  • Protect cleaning functions.
  • Automate validations before changes.
  • Document business rules as tests.
  • Prepare CI/CD for data processes.

Recomendaciones

Recommendations

  • Probar casos normales y casos extremos.
  • Mantener tests pequeños y claros.
  • Ejecutar pruebas antes de publicar scripts.
  • Agregar tests cuando aparece un error nuevo.
  • Test normal and edge cases.
  • Keep tests small and clear.
  • Run tests before publishing scripts.
  • Add tests when a new bug appears.

Valor del tópico

Topic value

Las pruebas unitarias convierten reglas de limpieza en garantías repetibles y reducen el riesgo de romper procesos existentes.

Unit tests turn cleaning rules into repeatable guarantees and reduce the risk of breaking existing processes.