Mocking 我可以使用Pester模拟/验证没有参数名称的cmdlet吗?

Mocking 我可以使用Pester模拟/验证没有参数名称的cmdlet吗?,mocking,cmdlets,advanced-installer,pester,Mocking,Cmdlets,Advanced Installer,Pester,我在高级安装程序15.1中使用了几个Powershell脚本,我希望使用Pester进行测试。高级安装程序提供了两个cmdlet,以便从Powershell脚本访问MSI变量,我希望在单元测试中模拟这些脚本。问题是,这些cmdlet的标准用法没有指定参数,例如 AI_GetMsiProperty MYPROPERTY AI_SetMsiProperty MYPROPERTY "Newvalue" Pester的功能允许您使用ParameterFilter参数,根据命名参数返回多个值到同一模拟的

我在高级安装程序15.1中使用了几个Powershell脚本,我希望使用Pester进行测试。高级安装程序提供了两个cmdlet,以便从Powershell脚本访问MSI变量,我希望在单元测试中模拟这些脚本。问题是,这些cmdlet的标准用法没有指定参数,例如

AI_GetMsiProperty MYPROPERTY
AI_SetMsiProperty MYPROPERTY "Newvalue"
Pester的功能允许您使用
ParameterFilter
参数,根据命名参数返回多个值到同一模拟的多个调用:

但是,由于AI_GetMsiProperty不使用命名参数,我不确定如何基于参数模拟多个get或set调用

Mock AI_GetMsiProperty { return "value1" } -ParameterFilter { ????? }
Mock AI_GetMsiProperty { return "value2" } -ParameterFilter { ????? }

有什么想法可以实现这一点吗?

如果这些命令是真的PowerShell cmdlet,您应该能够使用它们来确定位置参数名称。但是,如果根据另一个答案,它们不是cmdlet,则不能直接在它们上使用
Mock

此实例中一个可能的解决方法是将命令包装在
函数中,然后改为
Mock
此函数:

Function Get-MsiProperty ($Property, $Value) {
    AI_GetMsiProperty $Property $Value
}
模拟示例:

Mock Get-MsiProperty -ParameterFilter { $Property -eq 'somevalue' }

这很可能无法实现,因为据我所知,前面提到的get和set-msi-properties cmdlet是某种伪cmdlet。更确切地说,它们不是特定于PowerShell语法的cmdlet,而是特定于高级安装程序语法的cmdlet,并且它们只能在使用高级安装程序构建的安装程序包的安装期间工作

如果尝试在使用Advanced Installer构建的安装包之外运行相关cmdlet,PowerShell将无法解释它们

Mock Get-MsiProperty -ParameterFilter { $Property -eq 'somevalue' }