public RunnerFacade() { //It is possible with DI var rotateLeftActionInvoker = new ActionDeciderByPositionActionInvoker( new RotateLeftNActionInvoker(), new RotateLeftSActionInvoker(), new RotateLeftWActionInvoker(), new RotateLeftEActionInvoker() ); var rotaeRightActionInvoker = new ActionDeciderByPositionActionInvoker( new RotateRightNActionInvoker(), new RotateRightSActionInvoker(), new RotateRightWActionInvoker(), new RotateRightEActionInvoker() ); var moveActionInvoker = new ActionDeciderByPositionActionInvoker( new MoveNActionInvoker(), new MoveSActionInvoker(), new MoveWActionInvoker(), new MoveEActionInvoker() ); var singleCommandInvoker = new SingleCommandInvoker(moveActionInvoker, rotateLeftActionInvoker, rotaeRightActionInvoker); commandInvoker = new MultipleCommandInvoker(singleCommandInvoker); }
public void Move_IfDirectionW_CallWActionInvoker() { var instance = new ActionDeciderByPositionActionInvoker(NActionInvoker.Object, SActionInvoker.Object, WActionInvoker.Object, EActionInvoker.Object); var vehicleContext = new VehicleContext { Direction = Direction.W }; instance.Move(vehicleContext); NActionInvoker.Verify(x => x.Move(vehicleContext), Times.Never); SActionInvoker.Verify(x => x.Move(vehicleContext), Times.Never); WActionInvoker.Verify(x => x.Move(vehicleContext), Times.Once); EActionInvoker.Verify(x => x.Move(vehicleContext), Times.Never); }