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: ClosedInMotionOpeningOpen, 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 buttonPressedtimeout (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 doorsClosedsensor 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.