Considere a entidade Factura com o seguinte comportamento:
  • Podem ser adicionados e removidos items a uma Factura aberta através dos métodos add e remove.

  • Uma Factura aberta pode ser fechada (via método close) e após este momento já não podem ser alterados os items associados à Factura.

  • Uma Factura fechada pode ser cancelada (via método cancel) enquanto não for paga (via método pay).

  • Em qualquer situação é possível saber o valor total dos items associados à Factura (via método getCost).

  • Quando é criada uma Factura considere que ela está aberta.

Aplicando o padrão de testes mais apropriado, e descrevendo os vários passos da sua aplicação, desenhe os casos de teste que permitem verificar o comportamento desta classe.