Lección 15 de 16 · Una prueba es código que verifica código
Pruebas: assert y TDD
Ver que una prueba es una función que llama a tu código y que assert lanza un error si algo es falso.
Metodología · Práctica
Aprender con TDD (cada prueba es una hipótesis)
En el reto escribe primero la prueba de una regla nueva, mírala fallar (rojo) y después escribe el código.
Metodología · Práctica
Kata y práctica deliberada
Repite el ciclo rojo, verde, refactor con esta función tres veces, cada vez más rápido.
t<0 Antes de ejecutar
Lee el código y comprométete con una predicción
Mientras tanto, Python ya hizo su parte de t<0: leyó y compiló el archivo completo. Ninguna variable existe todavía.
programa.py
1def descuento(total, frecuente): 2 if frecuente: 3 return total * 10 // 100 4 return 0 5 6def test_frecuente_tiene_10_por_ciento(): 7 assert descuento(200, True) == 20 8 9def test_no_frecuente_no_tiene_descuento(): 10 assert descuento(200, False) == 0 11 12test_frecuente_tiene_10_por_ciento() 13test_no_frecuente_no_tiene_descuento() 14print("Pruebas en verde")
t=0 t>0 Ejecución paso a paso
Qué se ejecuta primero y dónde vive cada variable
Avanza con Siguiente paso o las flechas del teclado. Pasa el mouse por una variable para ver a qué objeto apunta.
t=-1
Antes de ejecutar
Python lee y compila el archivo
1def descuento(total, frecuente):2 if frecuente:3 return total * 10 // 1004 return 05 6def test_frecuente_tiene_10_por_ciento():7 assert descuento(200, True) == 208 9def test_no_frecuente_no_tiene_descuento():10 assert descuento(200, False) == 011 12test_frecuente_tiene_10_por_ciento()13test_no_frecuente_no_tiene_descuento()14print("Pruebas en verde")
Salida
(vacía)
Qué pasó
- Antes de ejecutar nada, Python lee el archivo completo y lo compila a bytecode: instrucciones que su máquina virtual entiende.
- Si hubiera un error de sintaxis, el programa fallaría aquí, sin ejecutar ni una sola línea.
- Nombres que aparecen en el código: descuento, frecuente, print, test_frecuente_tiene_10_por_ciento, test_no_frecuente_no_tiene_descuento, total. Ninguno existe todavía en memoria.
Pila de marcos · dónde viven los nombres
Todavía no hay marcos: ninguna variable existe.
Montón · dónde viven los objetos
Ningún objeto todavía.
Idea clave
Cada prueba es una función. Al llamarla, apila su marco, llama a descuento (otro marco), compara con == y assert verifica que sea True. pytest hace exactamente esto por ti con cada función test_.
t>0 Después: repaso sin mirar
Recupera de memoria
Responde sin volver al paso a paso. Para dominar la lección necesitas 2 de 2.
Explícalo con tus palabras (Feynman)
Dominio de la lección
Aún no
- Falta la predicción (t<0)
- Repaso: 0 de 2 (se necesitan 2)