CRITERIO

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.

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16

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")
Si descuento devolviera siempre 20, ¿qué prueba fallaría?

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

programa.pyrecién ejecutadasiguiente
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.

¿Qué hace assert cuando la condición es False?
¿Cuántos marcos hay cuando se ejecuta el return de descuento dentro de una prueba?

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)