首页 > 解决方案 > 我可以使用 Pester 模拟/验证没有参数名称的 cmdlet 吗?

问题描述

我正在使用几个带有 Advanced Installer 15.1 的 Powershell 脚本,我希望使用 Pester 对其进行测试。Advanced Installer 提供了两个 Cmdlet,以便从 Powershell 脚本访问 MSI 变量,即 AI_GetMsiProperty 和 AI_SetMsiProperty,我想在我的单元测试中模拟它们。问题是这些 cmdlet 的标准使用没有指定参数,例如

AI_GetMsiProperty MYPROPERTY
AI_SetMsiProperty MYPROPERTY "Newvalue"

Pester 的Mocking功能允许您使用ParameterFilter参数根据命名参数将多个值返回给同一模拟的多个调用:

Mock Get-ChildItem { return @{FullName = "A_File.TXT"} } -ParameterFilter { $Path -and $Path.StartsWith($env:temp\1) }
Mock Get-ChildItem { return @{FullName = "B_File.TXT"} } -ParameterFilter { $Path -and $Path.StartsWith($env:temp\2) }
Mock Get-ChildItem { return @{FullName = "C_File.TXT"} } -ParameterFilter { $Path -and $Path.StartsWith($env:temp\3) }

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

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

有什么想法可以做到这一点吗?

标签: mockingcmdletsadvanced-installerpester

解决方案


这很可能无法完成,这是因为据我所知,提到的获取和设置 msi 属性 cmdlet 是某种伪 cmdlet。更确切地说,它们不是特定于 PowerShell 语法的 cmdlet,而是特定于 Advanced Installer 语法的,它们仅在使用 Advanced Installer 构建的安装包的安装期间起作用。

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


推荐阅读