Tu tarea

Implementar un servicio para gestionar transacciones de una cuenta bancaria, así como imprimir el extracto bancario. Dicho servicio debe respetar la siguiente interfaz:

interface AccountService {
  void deposit(int amount) 
  void withdraw(int amount) 
  void printStatement()
}

Asumimos que el método printStatement() imprime el extracto bancario a través de la consola o salida estándar.

Por simplicidad, usaremos int para representar las cantidades monetarias (aunque sabemos que esto no es una buena práctica en sistemas productivos).

Reglas

  • No puedes cambiar la interfaz pública de esta clase, i.e. quitar, añadir o modificar ninguno de estos tres métodos.

Cómo resolverla

Esta es una kata perfecta para practicar el estilo Outside-in de TDD con la técnica de doble bucle.

Si optas por este camino, este es un buen test de aceptación para empezar, escrito en lenguaje Gherkin:

Given a client makes a deposit of 1000 on 10-01-2012
And a deposit of 2000 on 13-01-2012
And a withdrawal of 500 on 14-01-2012
When she prints her bank statement
Then she would see
date       || credit   || debit    || balance
14/01/2012 ||          || 500.00   || 2500.00
13/01/2012 || 2000.00  ||          || 3000.00
10/01/2012 || 1000.00  ||          || 1000.00

Recursos

Fuente: https://github.com/sandromancuso/Bank-kata