mocking - 我可以使用 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 { ????? }
有什么想法可以做到这一点吗?
解决方案
这很可能无法完成,这是因为据我所知,提到的获取和设置 msi 属性 cmdlet 是某种伪 cmdlet。更确切地说,它们不是特定于 PowerShell 语法的 cmdlet,而是特定于 Advanced Installer 语法的,它们仅在使用 Advanced Installer 构建的安装包的安装期间起作用。
如果您尝试在使用 Advanced Installer 构建的安装包之外运行相关的 cmdlet,PowerShell 将无法解释它们。
推荐阅读
- php - 无法理解 WithMultipleSheets 如何在 Laravel Excel 3.1 中工作
- unit-testing - 测试 GraphQL Apollo 和 Vue.js
- mysql - 在 MySQL 中生成一系列随机大小的数据
- c++ - 如何在 C++ 中手动初始化 std::list 的对象?如果类的指针有成员list<>,不能使用new怎么办?
- reactive-programming - 遍历 Flux
并使用 Webclient 获取数据 - android - 未解决的超类型:将 MockWebServer 与 Junit 5 一起使用时的 org.junit.rules.ExternalResource
- python - 为什么在 Windows 10(64 位)机器上使用 Spyder 导入 Matplotlib 时出现 winError 193?
- node.js - NodeJS+express 向表中多次插入数据
- ios - iOS如何检测到completionHandler没有被使用
- c++ - 使用 Nginx 在 C++ 中编写 REST 服务