Tests & Refactoring

Esta clase plantea una solución poco objetosa a un ejercicio. El objetivo es primero testearla codeando pruebas automatizadas y luego refactorizarla aprovechando las ideas del paradigma.

Objetivos de esta clase

  1. Comparar soluciones más algorítimicas vs más objetosas
  2. Formalizar las pruebas del programa
    1. Pasar de la consola al código con tests
    2. Plantear los casos de prueba (a.k.a clases de equivalencia)
  3. Seguir con la metodología propuesta
    1. Pienso las pruebas antes de tocaar el código
    2. El testing forma parte del desarrollo
  4. Se puede mejorar el diseño sin cambiar la funcionalidad

Elementos del lenguaje

  • if
  • null
  • Ejercutar tests por consola

Apuntes teóricos

Tamagotchi

Tamagotchi

Los Tamagotchi son mascotas virtuales que tuvieron su pico de popularidad en los 2000. Se trataban de aparatos que venían con un bichito que te demandaba cuidado. Había que hacerlos jugar, comer, bañar, etc. para que estén contentos, crezcan fuertes y no mueran.

Enunciado

Modelar un Tamagotchi del cual se conoce su edad, felicidad y el estado de ánimo, que puede ser hambriento o cansado (uno de los dos)

Un Tamagotchi puede jugar:

  • si está cansado pasa a estar hambriento
  • si está hambriento reduce su felicidad en 2
  • sino auntenta su felicidad en 1

Y también puede comer:

  • si está hambriento crece, lo que aumenta en uno su edad y se le va cualquier estado de ánimo que tenga
  • si está cansado reduce su felicidad en 1
  • además, idenpendiente de los casos anteriores, si su edad es mayor a 10, queda cansado

Al iniciar el aparato, el Tamagotchi comienza con 10 de felicidad, 0 de edad y sin ningún estado de ánimo

Solución

Se plantea una solución que modela el estado de ánimo con un string (nullable), teniendo ifs en los métodos jugar() y comer()

Link al código

Leer el código en conjunto para entender los if

1. Pruebas automatizadas

Preguntas gatillo

¿Este programa soluciona lo pedido?

Respuesta:

¿Cómo lo sabemos?

Respuesta: eso creemos, para garantizarlo habría que probarlo

Tests

Introducimos la idea de testing

  • son pruebas automatizadas que podemos ejecutar
    • código que prueba que el otro código anda como se espera
  • independientes y reproducibles
    • "el mundo se reinicia entre cada ejecución"
  • estructura:
    1. preparo
    2. ejecuto
    3. compruebo (esto es nuevo!)

#TODO

  • Escribir los casos de prueba
  • Cambiar el código para que use polimorfismo