我已经创建了一个新的Pester fixture并试图模拟对Get-Date
CmdLet的调用,但它无法正常工作。如果我不使用-ParameterFilter
,它确实有用。
dummy.ps1
function dummy {
return Get-Date -f "dd"
}
dummy.Tests.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
. "$here\$sut"
Describe "dummy" {
Mock Get-Date { return "01" } -Verifiable -ParameterFilter {$f -match "dd"}
It "does something useful" {
dummy
Assert-VerifiableMocks
}
}
输出
Describing dummy
[-] does something useful 99ms
RuntimeException: Expected Get-Date to be called with $f -match "dd"
at Assert-VerifiableMocks, C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Functions\Mock.ps1: line 434
at <ScriptBlock>, E:\…\dummy.Tests.ps1: line 11
Tests completed in 99ms
Passed: 0 Failed: 1 Skipped: 0 Pending: 0 Inconclusive: 0
我已尝试使用-eq
代替-match
-ParameterFilter
,但没有区别。
我觉得我必须在一个非常基本的层面上做错事,但是看不到它 - 有人可以帮助我吗?
如果它有所不同,这是在Windows 10虚拟机上; $PSVersionTable
的输出是:
Name Value
---- -----
PSVersion 5.1.14393.1198
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14393.1198
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
答案 0 :(得分:4)
出现此问题是因为您使用Derived* pd = &d;
Derived** ppd = &pd;
来表示$f
参数。 -format
是-f
常用的简写(以及您在函数中使用的内容),但似乎要让Mock工作,您需要使用完整的参数名称:
-format
返回:
Mock Get-Date { return "01" } -Verifiable -ParameterFilter {$format -match "dd"}