Considere a seguinte classe PrizeDB que permite guardar a descrição de prémios que podem ser atribuídos aos utilizadores de um sistema:
public class PrizeDB {
// ...
// The ctor. If prize is null, then the it creates an empty PrizeDB, otherwise it creates a PrizeDB already with one prize
public PrizeDB(Prize prize) {
// ...
}
// adds the given Prize p to the current set of prizes
public void add(Prize p) {
//...
}
// removes the prize with the given ID from the current set of prizes
public void remove(int id) {
// ...
}
// changes the description of the prize with given id to description
public void change(int id, String description) {
// ...
}
// returns the prize with given id, null if no such prize
public Prize find(int id) {
// ...
}
// returns the current number of prizes
public int getNumberOfPrizes() {
// ...
}
// checks if there is already a prize with the given id
public boolean hasId(int id) {
// ....
}
}
A classe Prize descreve um prémio e tem como atributos uma descrição, um identificador, e um valor monetário. Do ponto de vista da classe PrizeDB, existem as seguintes restrições:
- O número de prémios que são mantidos em qualquer momento é menor ou igual a 10;
- A descrição de qualquer prémio tem que ser maior ou igual do que 10 caracteres e menor do que 100;
- Não há dois prémios com o mesmo identificador
Qualquer violação de pelo menos uma destas restrições deve ser assinalada lançando a excepção InvalidInvocationException e o seu efeito deve ser anulado. Aplicando o padrão de teste ao nível de classe correcto, concretize todos os casos de teste utilizando a framework de testes TestNG.