Pester测试中Mock Get-CimInstance未生效返回真实系统版本问题
问题产生原因
- 核心诱因是代码执行时序完全错位,Mock生效时机晚于真实命令调用:
你在BeforeAll块中点源加载无函数封装的WinVersion.ps1时,脚本的顶层执行逻辑会立刻运行:Get-CimInstance命令会在测试流程进入It块、定义Mock规则之前就直接调用真实实现,把当前环境的真实系统版本赋值给$WindowsVersion变量。等你后续在It块中写完Mock配置时,真实的命令调用早就执行完成,$WindowsVersion已经存储了真实值,Mock自然不会被触发,这也是移除ParameterFilter参数后问题仍然存在的根本原因。 - 次要问题是Mock代码存在拼写错误:Mock返回值的类型名
[Microsoft.Management.Infrastructure.CimInstanc]缺失末尾的字母e,正确类型全称为[Microsoft.Management.Infrastructure.CimInstance],即使解决时序问题,这个笔误也会导致Mock返回对象不符合预期。
内容的提问来源于stack exchange,提问作者eagle00789
相关产品推荐
相关产品推荐

