¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Una prueba que comprueba una función

Después de esta lección: Puedo escribir una prueba que comprueba una función.

Lección de 50 minSin comandos

La factura que nadie revisó

Una empresa de mensajería cambia una línea de su código un viernes. El lunes, cientos de clientes reciben una factura con el importe mal.

El cambio parecía inofensivo. Nadie comprobó qué devolvía la función después. Una prueba de tres líneas lo habría avisado antes de publicar el cambio.

Al final de esta lección

Nota

Puedo escribir una prueba que comprueba una función.

Palabras clave

PalabraQué significaEjemplo
Pruebacódigo que comprueba que otro código hace lo que debetest_exactly_ten
assertuna orden que para el programa si algo no es ciertoassert total == 900
Valor esperadolo que la función debería devolver
Valor obtenidolo que la función devuelve de verdad
Caso límiteel valor justo donde cambia una norma

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una prueba compara lo esperado con lo obtenido

Una prueba hace siempre lo mismo. Llama a la función con un dato concreto. Después compara lo que devuelve con lo que debería devolver.

Para comparar se usa assert. Si la comparación es cierta, el programa sigue sin decir nada. Si es falsa, se para con un AssertionError.

Prueba: un recargo por retraso

Código: python
def late_fee(days_late):
    # Un gimnasio cobra 5 euros si pagas la cuota con más de 3 días de retraso.
    if days_late > 3:
        return 5
    return 0


expected = 5
actual = late_fee(10)
print("Esperado:", expected, "Obtenido:", actual)
assert actual == expected
print("Prueba superada")

Los fallos se esconden en el límite

La norma del gimnasio cambia en el día 3. Hasta 3 días no pagas nada. Desde el día 4, pagas 5 euros.

Probar con 0 días y con 10 días está bien, pero no basta. El fallo típico está justo en el límite: un > que alguien escribió como >=.

Por eso una buena prueba mira siempre el valor exacto donde cambia la norma.

Ejemplo: qué valores probar

Días de retrasoRecargo esperadoPor qué probarlo
00 eurosel caso normal
30 eurosel límite exacto
45 eurosel primer día con recargo
105 eurosun retraso largo

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Practica: prueba el límite

Código: python
def late_fee(days_late):
    # Alguien cambió > por >= sin darse cuenta.
    if days_late >= 3:
        return 5
    return 0


assert late_fee(0) == 0
print("Pago a tiempo: bien")
assert late_fee(10) == 5
print("Diez días tarde: bien")

# Añade un assert para exactamente 3 días de retraso.
# Según la norma, ¿cuánto se cobra? Pulsa Ejecutar y lee qué pasa.

Un error frecuente

Advertencia

Mucha gente cree que si todas las pruebas pasan, el código está bien. Solo demuestra que funciona con los valores probados. Si nadie probó el límite, el fallo sigue ahí. Pregúntate siempre qué valor no has probado todavía.

Cada prueba es una función test_

En un proyecto real, las pruebas no van sueltas. Cada una es una función cuyo nombre empieza por test_.

Una herramienta como pytest busca esas funciones y las ejecuta todas. Después te dice cuáles fallan.

Pon a cada prueba un nombre que diga qué comprueba, como test_exactly_ten. Si falla, el nombre ya te dice dónde mirar.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.