我有一个用于测试某些powershell cmdlet的测试套件,问题是,如果我独立运行每个测试,我将获得正确的结果,但是如果我运行整个套件,则可以从其他测试中获取信息。
我有一个具有私有只读词典字段的类
在该类中,我有一个在每个测试方案之前都已执行的钩子 它创建一个运行空间,并将其添加到字典中以供以后使用。
在每种情况下,我都有一个钩子,它将从字典中获得运行空间并进行处理。
在测试过程中,我将从以下代码返回的输出对象添加到字典中,以便可以在以下步骤中对其进行断言。
问题是,如果我运行一个cmdlet,它将在一个测试中创建一个名称为“ bob”的新配置文件,然后运行cmdlet在另一个出于某种原因而没有创建配置文件的测试中获取该配置文件,输出将继续包含来自另一个测试的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 cmdlet时,它不应返回任何配置