Probar código generado es comprobarlo con casos tuyos
Probar código generado es ejecutarlo con ejemplos y casos límite que escribes tú, antes de usarlo. Una prueba que pasa te da confianza, y una que falla te ahorra un problema.
Una tienda de Zaragoza pide a un asistente una función con el coste de envío por peso. La función parece correcta, pero nadie la ha puesto a prueba.
Al final de esta lección
Nota
Puedo escribir casos de prueba que comprueban código generado.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Caso de prueba | una entrada con su resultado esperado | |
| Valor límite | el dato justo en el borde de una regla | 5 kg |
| Valor esperado | el resultado correcto que escribes antes | |
| Prueba que falla | una prueba que descubre un defecto | |
| Regresión | algo que funcionaba y deja de funcionar |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Escribe los casos antes de ver el código
Escribe cada valor esperado a partir del enunciado, no a partir del código. Si lo sacas de ejecutar la función, la prueba siempre pasa y no prueba nada.
Empieza por lo normal, sigue por los bordes y acaba por lo raro: cero, vacío, un dato que sobra.
Ejemplo: casos para el coste de envío
| Tipo de caso | Peso | Esperado | Por qué sirve |
|---|---|---|---|
| Normal | 0,5 kg | 4,00 | La regla más común |
| Límite | 1 kg | 4,00 | El borde: hasta 1 kg incluido |
| Límite | 5 kg | 6,50 | El otro borde |
| Justo después | 5,1 kg | 9,90 | Dónde empieza la tarifa alta |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pon la función a prueba con la tabla
# Un envío cuesta 4,00 euros hasta 1 kg incluido, 6,50 hasta 5 kg y 9,90 después.
def envio(peso):
if peso < 1:
return 4.0
elif peso <= 5:
return 6.5
return 9.9
casos = [[0.5, 4.0], [1, 4.0], [5, 6.5], [5.1, 9.9]]
for caso in casos:
peso = caso[0]
esperado = caso[1]
obtenido = envio(peso)
if obtenido == esperado:
print(peso, "bien")
else:
print(peso, "falla: esperaba", esperado, "y da", obtenido)
# Cambia el 1 de la lista por 0.9 y mira qué cambia.
Un borde descubre el defecto oculto
El peso 0,5 y el peso 5 pasan, y el código parece bien. Pero 1 kg sale a 6,50 en lugar de 4,00. La regla dice "hasta 1 kg incluido" y el código escribe < en vez de <=.
Un solo ejemplo del medio no lo habría visto. Los bordes son donde se esconden los fallos.
Un error frecuente
Advertencia
Mucha gente cree que, si el asistente escribe las pruebas y pasan, el código es correcto. Puede ser un error repetido: la prueba y el código parten de la misma idea equivocada. Escribe tú los casos, o revisa los suyos contra el enunciado.
Guarda las pruebas para detectar regresiones
Cuando el código pasa, conserva las pruebas. Si mañana un asistente cambia la función, ejecutas las pruebas y sabes si algo dejó de funcionar.
Eso es una regresión: algo que andaba y se rompió. Las pruebas guardadas la avisan en un segundo.
Mira qué pruebas trae el proyecto
El proyecto de la cantina trae sus propias pruebas. Estas órdenes solo las cuentan y comprueban un resultado que ya sabes, sin cambiar nada. Ejecutar todas las pruebas, y buscar qué falla, es la tarea del laboratorio y la haces tú.
Cuenta las pruebas del proyecto
docker exec -w /home/node/project agent grep -c "^test(" shop.test.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Comprueba un resultado conocido
docker exec -w /home/node/project agent node -e "console.log(require('./shop').asPounds(180))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Prueba un solo producto
docker exec -w /home/node/project agent node -e "console.log(require('./shop').total(['apple']))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.