7

使用 Pester,我正在模拟一个高级功能,该功能除了其他参数外,还需要一个开关。如何-parameterFilter为包含 switch 参数的模拟创建一个?

我试过了:

-parameterFilter { $Domain -eq 'MyDomain' -and $Verbose -eq $true }

-parameterFilter { $Domain -eq 'MyDomain' -and $Verbose }

-parameterFilter { $Domain -eq 'MyDomain' -and $Verbose -eq 'True' }

无济于事。

4

3 回答 3

7

尝试这个:

-parameterFilter { $Domain -eq 'MyDomain' -and $Verbose.IsPresent}
于 2014-11-04T14:26:36.940 回答
1

-Verbose是一个常见的参数,这使得这有点棘手。您实际上从未$Verbose在函数中看到变量,这同样适用于参数过滤器。相反,当有人设置公共-Verbose开关时,实际发生的是$VerbosePreference变量被设置为Continue而不是SilentlyContinue.

但是,您可以在$PSBoundParameters自动变量中找到 Verbose 开关,并且您应该能够在模拟过滤器中使用它:

Mock someFunction -parameterFilter { $Domain -eq 'MyDomain' -and $PSBoundParameters['Verbose'] -eq $true }
于 2016-03-17T13:02:03.547 回答
0

以下似乎工作正常:

Test.ps1 - 这仅包含两个函数。两者都采用相同的参数,但Test-Call调用到Mocked-Call. 我们将在测试中模拟Mocked-Call

Function Test-Call {
    param(
        $text,
        [switch]$switch
    )

    Mocked-Call $text -switch:$switch
}

Function Mocked-Call {
    param(
        $text,
        [switch]$switch
    )

    $text
}

Test.Tests.ps1 - 这是我们实际的测试脚本。请注意,我们有两个模拟实现Mocked-Call。当switch参数设置为true时,第一个将匹配。当text参数的值为第四个 并且参数的switch值为false时,第二个将匹配。

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace(".Tests.", ".")
. "$here\$sut"

Describe "Test-Call" {

    It "mocks switch parms" {
        Mock Mocked-Call { "mocked" } -parameterFilter { $switch -eq $true }
        Mock Mocked-Call { "mocked again" } -parameterFilter { $text -eq "fourth" -and $switch -eq $false }

        $first = Test-Call "first" 
        $first | Should Be "first"

        $second = Test-Call "second" -switch
        $second | Should Be "mocked"

        $third = Test-Call "third" -switch:$true
        $third | Should Be "mocked"

        $fourth = Test-Call "fourth" -switch:$false
        $fourth | Should Be "mocked again"

    }
}

运行测试显示绿色:

Describing Test-Call
[+]   mocks switch parms 17ms
Tests completed in 17ms
Passed: 1 Failed: 0
于 2013-11-13T21:13:12.207 回答