Comprende la idea
Antes de empezar: Funciones, listas, condicionales y excepciones.
Una prueba compara un comportamiento observado con uno esperado. Para que sea útil, el esperado debe salir del contrato o de un razonamiento independiente, no de copiar la misma fórmula que podría estar mal en la implementación.
Una función con una decisión explícita
def media(datos):
if len(datos) == 0:
raise ValueError("Se necesita al menos un dato")
return sum(datos) / len(datos)
assert media([2, 4, 6]) == 4
assert media([5]) == 5
assert media([-3, 3]) == 0El contrato supone una colección de números compatibles con suma y división. Los casos cubren varios elementos, uno solo y cancelación de signos. No afirman que la función acepte cadenas ni cualquier objeto.
Probar el rechazo
try:
media([])
except ValueError:
pass
else:
raise AssertionError("La lista vacía debía rechazarse")Si no hay excepción, la prueba falla. Un bloque que capture cualquier error podría aceptar accidentalmente un fallo distinto; por eso comprobamos el tipo esperado.
Decimales aproximados
Para cálculos con punto flotante, algunas expresiones no coinciden exactamente con su representación decimal ideal. Puede ser apropiado usar una tolerancia absoluta y relativa con math.isclose, elegida según la escala y la precisión que exige el problema.
¿Pasar tres pruebas demuestra que no hay errores?
No. Es evidencia sobre esos casos. Amplía las pruebas cuando identifiques otra clase de entrada o un error concreto; repetir entradas casi idénticas puede aportar poco.
Vamos con un ejemplo
Una media que divide siempre entre 3 pasa el caso [2,4,6], pero falla con [5]: daría en lugar de 5. El caso de un elemento comprueba una decisión que el primero no distingue. Por eso importa la variedad conceptual de casos.
Conecta y aplica
Cuando corriges un error, guarda una prueba que lo reproduzca con una entrada pequeña. Después comprueba que esa prueba pasa y que las decisiones importantes que antes funcionaban siguen cubiertas.
Un detalle que importa: No uses igualdad aproximada para ocultar un error de unidades o una fórmula equivocada. La tolerancia debe justificar diferencias numéricas pequeñas, no aceptar cualquier resultado.
Ponlo a prueba
¿Qué caso detecta mejor una media que divide siempre entre 3?
Elige una respuesta para ver la explicación.
¿Necesitas ayuda con este tema?
Trabájalo paso a paso con un profesor de EATRYL. Consulta disponibilidad y costo para reforzar Pruebas de funciones: elegir casos que revelen errores.
Consultar una clase sobre este tema