A assinatura do metodo update do professor pode ser alterada para:
public void update(stateMachine.Subject sm, String newStateName)
?
Estava dando erro de overriding com public void update(stateMachine.StateMachine sm, String newStateName)
O método fireEvent() na classe StateMachine realmente retorna um boolean???
É que na classe de tetes, aparece, por exemplo:
sm.fireEvent("jogar_bola");
Desse jeito, o método fireEvent não retornaria void? (ou seja, sem parâmetro de retorno)
Luty, esse valor de retorno é utilizado no código de testes, nas seguintes linhas:
try { assertFalse(sm.fireEvent("perder_mulher")); }catch (UndefinedTransitionException e) { } temSuperPoderes = false; try { assertTrue(sm.fireEvent("perder_mulher")); }catch (UndefinedTransitionException e) { fail("não deve gerar excessão"); }
Pode-se chamar um método que retorne um valor sem utilizar o mesmo, não há nada que impeça.
Outra coisa que reparei agora há pouco….
Não deve atrapalhar o teste, só pra ficar mais didático, mas, na classe de testes,
o método testStateCommand está testando a classe EventCommand e o método
testEventCommand está testando a classe StateCommand….
Uma outra observação na classe de teste: nas linhas finais, aparecem as classes
UndefinedStateError e UndefinedEventError.
Essas são as classes UndefinedStateException e UndefinedEventError, respectivamente?
Se forem mesmo, então precisa mudar isso na classe de teste.
Tem razão, Luty. As classes são UndefinedStateException e UndefinedEventException, do jeito que o Bernardo tinha colocado no roteiro do laboratório, na seção Exceções.
Pelo que eu entendi, tanto uma subclasse de RuntimeException quanto uma subclasse de Error não precisam de tratamento de exceções.
Então não sei se tem muita diferença usar um ou outro…
Pelo que Bernardo colocou no roteiro, somente UndefinedStateException é do tipo não-checada. As outras duas são.