public void ChangingShouldRaiseEvent()
        {
            var firstState = new Mock<State1>();
              var secondState = new Mock<State2>();

              var stateManager = new StateManagerBuilder()
            .RegisterState(() => firstState.Object)
            .RegisterState(() => secondState.Object)
            .Build();

              stateManager.MonitorEvents();
              stateManager.ChangeState<State1>();

              stateManager.ShouldRaise("StateChanged");
        }
        public void ChangingToInitialState()
        {
            var firstState = new Mock<State1>();
              var secondState = new Mock<State2>();

              var stateManager = new StateManagerBuilder()
            .RegisterState(() => firstState.Object)
            .RegisterState(() => secondState.Object)
            .Build();

              stateManager.ChangeState<State1>();

              firstState.Verify(m => m.OnEnterState(It.IsAny<object>()), Times.Once());
              firstState.Verify(m => m.OnExitState(), Times.Never());
              secondState.Verify(m => m.OnEnterState(It.IsAny<object>()), Times.Never());
              secondState.Verify(m => m.OnExitState(), Times.Never());
        }