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

能否通过Pester Mock [Type]::new()?关于[TESTType]构造方法的测试咨询

当然可行啦!在Pester里Mock自定义类型的静态构造方法[TESTType]::new()完全没问题,我给你拆解下具体怎么操作:

具体实现步骤
  • 首先确保你的测试脚本已经正确引入Pester模块,测试结构符合Pester的规范(比如用Describe和It块包裹)。

  • 使用Pester的Mock命令直接针对构造方法进行Mock,示例代码如下:

    # Mock构造方法,指定参数过滤条件(可选),并返回模拟的实例
    Mock [TESTType]::new {
        # 这里可以返回一个模拟的TESTType对象,或者自定义的PSCustomObject来模拟其行为
        return [PSCustomObject]@{
            # 模拟原类型的属性,方便后续断言
            SampleProperty = "MockedResult"
        }
    } -ParameterFilter { $Var -eq "TargetInput" }
    

    其中-ParameterFilter是可选配置,如果你只想针对特定的$Var参数值触发Mock,就加上这个条件;如果要Mock所有调用,直接去掉这个参数就行。

  • 执行你的目标代码后,就可以断言结果是否符合Mock的预期了:

    It "Should invoke the mocked TESTType constructor" {
        $output = [TESTType]::new("TargetInput")
        $output.SampleProperty | Should -Be "MockedResult"
    }
    
一些注意要点
  • 如果TESTType是自定义的.NET类型,要确保测试环境已经加载了对应的程序集,不然Pester找不到这个类型就没法Mock啦。
  • 要是你的构造方法有多个重载(不同参数数量/类型),可以通过-ParameterFilter精准匹配特定的重载版本,避免Mock干扰到其他调用。
  • 如果你需要验证构造方法被调用的次数,还可以用Assert-MockCalled命令来检查:
    Assert-MockCalled [TESTType]::new -Exactly 1 -ParameterFilter { $Var -eq "TargetInput" }
    

内容的提问来源于stack exchange,提问作者orange-lily

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:02:53