Почему результаты предыдущего командлета отображаются в результатах следующего - PullRequest
0 голосов
/ 16 мая 2019

У меня есть набор тестов для тестирования некоторых командлетов powershell, проблема в том, что если я буду запускать каждый тест независимо, у меня будут правильные результаты, но если я запускаю весь набор, я получаю информацию из других тестов.

у меня есть класс, который имеет частное поле только для чтения словаря

в этом классе, у меня есть ловушка, которая выполняется перед каждым тестовым сценарием, который создает пространство выполнения и добавляет его в словарь для использования позже.

у меня также есть ловушка для каждого сценария, он будет получать пространство выполнения из словаря и утилизировать его.

во время тестов я добавляю объект вывода, который возвращается из следующего кода, всловарь, чтобы я мог сделать свои утверждения на нем в следующих шагах.

Проблема заключается в том, что если я запускаю командлет, который создаст новый профиль с именем «bob» в одном тесте, а затем запустите командлетчтобы получить профиль в другом тесте, в котором по какой-либо причине не было создано ни одного профиля, выходные данные будут по-прежнему содержать профиль bob из другого теста

Я убедился, что все перехваты действительно работают так, как задумано, и все утилизируется.правильно

    public static PowershellOutput ExecutePowershellCommand(Runspace runspace, string commandName, IEnumerable<CommandParameter> commandParameters, string runspaceVariableName = null)
    {
        var output = new PowershellOutput();
        using (var pipeline = runspace.CreatePipeline())
        {
            var command = new Command(commandName);
            foreach (var commandParameter in commandParameters)
            {
                command.Parameters.Add(commandParameter);
            }
            pipeline.Commands.Add(command);
            output.Errors = new List<ErrorRecord>();
            try
            {
                output.Result = pipeline.Invoke();
                if (!string.IsNullOrEmpty(runspaceVariableName))
                {
                    runspace.SessionStateProxy.SetVariable(runspaceVariableName, output.Result[0].BaseObject);
                }
            }
            catch (Exception e)
            {
                output.Errors.Add(new ErrorRecord(e, string.Empty, ErrorCategory.InvalidOperation, e));
            }

            if (pipeline.Error.Count <= 0)
            {
                return output;
            }

            while (!pipeline.Error.EndOfPipeline)
            {
                var value = pipeline.Error.Read() as PSObject;

                var currentErrorRecord = value?.BaseObject as ErrorRecord;
                if (currentErrorRecord != null)
                {
                    output.Errors.Add(currentErrorRecord);
                }
            }
        }
        return output;
    }

когда я запускаю командлет get profile без профиля, созданного в контексте этого теста, он не должен возвращать никакой профиль

...