在Pester中进行模拟时,如何使用switch参数来使用parameterFilter?

时间:2013-11-11 19:03:59

标签: powershell pester

使用Pester,我正在嘲笑一个高级功能,其中包括一个开关。如何为包含switch参数?

的模拟创建-parameterFilter

我试过了:

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

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

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

无济于事。

3 个答案:

答案 0 :(得分:5)

试试这个:

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

答案 1 :(得分:1)

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

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

Mock someFunction -parameterFilter { $Domain -eq 'MyDomain' -and $PSBoundParameters['Verbose'] -eq $true }

答案 2 :(得分: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