Considere a seguinte classe que representa o comando de fecho das portas de um elevador:
public class Door {
public void actionEnded() {...};
public void sensor() {...};
public void moving() {...};
public void stopped() {...};
public void buttonPressed() {...};
public void timeout() {...};
}
Esta classe tem o seguinte comportamento:
Existem os seguintes estados: Closed, InMotion, Opening, Open, and Closing.
No estado Closed são aceites as seguintes invocações: moving (que provoca uma passagem para o estado InMotion) e buttonPressed (que provoca uma passagem para o estado Opening).
No estado InMotion apenas é aceite a invocação do método stopped (provocando a passagem para o estado Closed).
No estado Opening são aceites as invocações dos métodos buttonPressed (provocando a passagem para o estado Closing e a acção openDoors) e actionEnded (provocando a passagem para o estado Open e a realização da acção restartTimer).
- No estado Open são aceites as invocações dos métodos buttonPressed, timeout (que provocam ambos a passagem para o estado Closing e a acção closeDoors) e sensor (que mantém o estado mas provoca a acção restartTimer).
- Finalmente, o estado Closing aceita os métodos actionEnded (que provoca o a passagem para o estado closed e a acção doorsClosed) sensor e buttonPressed (que provocam ambos a passagem para o estado Opening e a acção openDoors).
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.