我正在使用 Pester 对我编写的一些代码进行单元测试。在我Test-Path
使用参数过滤器模拟的测试中:
Mock -CommandName 'Test-Path' -MockWith { return $false } `
-ParameterFilter { $LiteralPath -and $LiteralPath -eq 'c:\dummy.txt' }
以下是我正在做的伪代码:
If ( Test-Path -LiteralPath c:\dummy.txt )
{
return "Exists"
}
else
{
Attempt to get file
If ( Test-Path -LiteralPath c:\dummy.txt )
{
return "File obtained"
}
}
在第一次打电话给Test-Path
我想回来$false
,在第二次打电话给我想回来$true
。我可以想到几种方法来实现这一点,但他们感觉不对:
第一次调用使用
Path
参数,第二次使用LiteralPath
。有两个模拟一个ParameterFilter
,每个模拟一个。我不喜欢为了方便测试而修改代码的想法。创建一个带有参数的函数:
Path
和InstanceNumber
。为函数创建模拟。这比上面的要好,但是我不喜欢仅出于测试目的而使用参数的想法。
我已经看过并且找不到基于第 n 个调用来模拟的方法。Pester 是否促进了这一点,而我只是错过了它?如果没有,是否有更清洁的方法来实现我想要的?