Quer-se desenvolver a funcionalidade representada pela seguinte user story:

  • Como utilizador, quero ser capaz de criar uma conta bancária. Uma conta bancária deve conter um identificador (número inteiro), estado da conta (activo/inactivo) e um saldo.Por omissão, quando é criado uma conta, o seu identificador é 0, está activa e o saldo é 0.0. Deve ser possível criar contas com um dado identificador e saldo.
  • É possível congelar a conta, tornando-a inactiva. Posteriormente, é possível torná-la activa outra vez.
  • Deve ser possível depositar e levantar dinheiro da conta numa conta activa mas o saldo nunca poderá ficar negativo. A quantia nunca pode ser negativa em ambos os casos. Caso a operação não seja válida, então deve lançar uma excepção.
  • Todas as operações realizadas sobre uma conta devem ser guardadas num ficheiro de log por forma a que as operações realizadas sobre as contas bancárias possam ser auditadas. A entidade Log será responsável por escrever no ficheiro de log. A instância de Log a utilizar por cada conta bancária é indicada no construtor. Esta entidade terá apenas um método: void writeTo(int accountId, OperationType type, float value, boolean sucess). Considere que OperationType é um enumerado com os seguintes valores: ADD, WITHDRAWAL, CREATION, FREEZE, ACTIVATE.
Aplicando a metodologia Test Driven Development, concretize a entidade conta bancária com a funcionalidade descrita atrás.
Pode ser necessário aplicar a framework JMockit para verificar a correcta concretização de algumas das funcionalidades indicadas.