public void GivenElevatorInFirstFloor_WhenRequetIsAddedToMoveToGround_ThenElevatorIsMovedToGroundFloor() { //Arrange AutoResetEvent signalRequestCompletion = new AutoResetEvent(false); Elevator elevator = new Elevator(GetFloors(), "Elevator 1"); elevator.AddRequest(1, (elevatorReachedDestination) => { //Act elevator.AddRequest(0, (elevatorGroundFloor) => { //Assert var actions = elevator.GetActions(); Assert.Equal(4, actions.Length); Assert.Equal(new ElevatorAction(0, 1), actions[0]); Assert.Equal(new ElevatorAction(1), actions[1]); Assert.Equal(new ElevatorAction(1, 0), actions[2]); Assert.Equal(new ElevatorAction(0), actions[3]); signalRequestCompletion.Set(); }); elevator.CloosDoors(); }); signalRequestCompletion.WaitOne(); }