You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pester中使用Mock并解决Get-ChildItem模拟报错问题

问题根因

报错的核心原因是参数符号不合法:你编写的Mock语句中,MockWith参数前的横杠使用了长破折号(–)而非PowerShell语法要求的半角减号(-)。PowerShell无法识别该符号为参数前缀,会把后续内容整体识别为字符串,无法转换为MockWith参数要求的ScriptBlock类型,因此抛出类型转换异常,报错信息里的乱码â€就是长破折号的编码异常显示。

修复后的代码
It 'Test get latest version' {
    Mock -CommandName 'Test-Path' -MockWith {
        return $true  
    }
    Mock -CommandName 'Get-ChildItem' -MockWith {
        $MockedListOfDirectories = @(
            'test_1.0.1.1',
            'test_1.1.10.5',
            'test_1.1.10.1',
            'test_1.2.18.1',
            'test_1.4.7.0'
        )
        # 可选优化:如果后续逻辑依赖Get-ChildItem返回的DirectoryInfo对象属性(比如Name、FullName),可以改成返回模拟对象:
        # return $MockedListOfDirectories | ForEach-Object { [PSCustomObject]@{ Name = $_; FullName = "C:\test\$_" } }
        return $MockedListOfDirectories
    }
            
    # 此处补充你原本要执行的测试逻辑即可
}
补充说明
  • 如果后续测试逻辑中需要调用Get-ChildItem返回结果的属性(比如.Name取文件夹名、.FullName取完整路径),建议模拟返回和原生命令输出结构一致的PSCustomObject,避免后续逻辑因为类型不匹配报错。
  • 编写PowerShell代码时不要从Word、Pages等排版软件中直接复制粘贴符号,这类软件会自动把半角减号替换为长破折号,导致语法异常。

内容的提问来源于stack exchange,提问作者user16908085

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:54:08