7

Pester を使用して、他のパラメーターの中でも特にスイッチを使用する高度な関数をモックしています。-parameterFilterswitch パラメータを含むモックを作成するにはどうすればよいですか?

私はもう試した:

-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ます。

ただし、自動変数で Verbose スイッチを見つけること$PSBoundParametersができ、モック フィルターでそれを使用できるはずです。

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

以下はうまくいくようです:

Test.ps1 - これには 2 つの関数だけが含まれています。両方とも同じパラメータを取りますが、Test-Callを呼び出しますMocked-CallMocked-Callテストでモックします。

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

    Mocked-Call $text -switch:$switch
}

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

    $text
}

Test.Tests.ps1 - これは実際のテスト スクリプトです。には 2 つのモック実装があることに注意してくださいMocked-Callswitch最初は、パラメーターがtrueに設定されている場合に一致します。textパラメータの値がfour、パラメータの値がfalseの場合、2番目 は一致します。switch

$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 に答える