public void UndoCommands(RobotCommand.Core.RobotCommand robotCommand1, RobotCommand.Core.RobotCommand robotCommand2)
        {
            var sequence = Sequence.Create();

            robotCommand1 = CreateMock <RobotCommand.Core.RobotCommand>(args: CreateMock <IRobot>());
            robotCommand2 = CreateMock <RobotCommand.Core.RobotCommand>(args: CreateMock <IRobot>());

            robotCommand1.Setup(x => x.Execute()).InSequence();
            robotCommand2.Setup(x => x.Execute()).InSequence();
            robotCommand2.Setup(x => x.Undo()).InSequence();
            robotCommand1.Setup(x => x.Undo()).InSequence();

            "Given a first command is issued"
            .x(() => TestInstance.Commands.Enqueue(robotCommand1));

            "And a second command is issued"
            .x(() => TestInstance.Commands.Enqueue(robotCommand2));

            "When the commands are executed"
            .x(() => TestInstance.ExecuteCommands());

            "And then the commands are undone"
            .x(() => TestInstance.UndoCommands(2));

            "Then the commands are executed in the issue sequence and undone in reverse order"
            .x(() => Should.NotThrow(() => sequence.Dispose(), "Commands should have been executed and then undone in order, but were not."));
        }