能否通过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
相关产品推荐
相关产品推荐

