У меня есть набор тестов для тестирования некоторых командлетов 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 без профиля, созданного в контексте этого теста, он не должен возвращать никакой профиль