2015-12-19 3 views
1

Я пытаюсь написать базовый тест, который проверяет Pester в «продвинутые» функции для разрешенного набора параметров:Как проверить разрешенный набор параметров?

function Do-Stuff 
{ 
    [CmdletBinding(DefaultParameterSetName='Set 1')] 
    [OutputType([String])] 

    Param 
    (
     [Parameter(ParameterSetName='Set 1')] 
     [switch] 
     $S1, 

     [Parameter(ParameterSetName='Set 2')] 
     [switch] 
     $S2 
    ) 

    $PSBoundParameters |select -ExpandProperty Keys 
} 

Describe Do-Stuff { 
    It 'Returns "S2" when switch "S2" is set' { 
     $actual = Do-Stuff -S2 
     $expexted = 'S2' 
     $actual |Should Be $expexted 
    } 

    # How to test the resolved parameter set? 
    It 'The resolved parameter set is "Set 2" when switch "S2" is set' { 
     $actual = 'What to do here?' # I'm lost ;(
     $expexted = 'Set 2' 
     $actual |Should Be $expexted 
    } 
} 

Thanx. Любые советы будут высоко оценены, так как я совершенно не знаком с Pester. ... не намного лучше в шикарное и кодирования в целом либо: D

ответ

2

Ниже будет проверить, если вы использовать 'Set 2' для параметра S2:

Describe Do-Stuff { 
    $Command = Get-Command 'Do-Stuff' 

    It 'Returns "S2" when switch "S2" is set' { 
     $actual = Do-Stuff -S2 
     $expexted = 'S2' 
     $actual |Should Be $expexted 
    } 

# How to test the resolved parameter set? 
    It 'The resolved parameter set is "Set 2" when switch "S2" is set' { 
     $actual = $Command.Parameters["S2"].ParameterSets.Keys 
     $expexted = 'Set 2' 
     $actual |Should Be $expexted 
     # when you use several sets for parameters 
     $expexted -contains $actual | should Be $true 
    } 

}

Трассировка если PowerShell фактически выполняется 'набор 2', когда вы установите его так, не предмет для тестирования приступов imho ...

0

Использование следующим образом:

Function Main{ 
    [CmdletBinding(SupportsShouldProcess=$true,DefaultParameterSetName="ViewOnly")] 
Param(

[Parameter(ParameterSetName="ViewOnly")] 
    [switch]$ViewOnly, 

[Parameter(ParameterSetName="NukeAll")] 
[switch]$NukeAll 
) 

Switch ($PSCmdlet.ParameterSetName){ 
"NukeAll"{ 
NukeAll 
}#end nuke all 
"ViewOnly"{ 
ViewOnly 
}#end viewonly 
    }#end Switch 

Function NukeAll { 
    #Do NukeAll function code here. 
} 

Function ViewOnly{ 
    #Do ViewOnly function code here. 
} 
+0

не думаю, что вы меня достали. mah bad, sorry –

2

Вы бы использовать the Trace-Command cmdlet для этого.

Параметр -Name будет установлен в ParameterBinderController.

Как способ начать, попробовать что-то вроде этого (вне Pester)

Trace-Command -Name ParameterBinderController -Expression { Do-Stuff -S2 } -PSHost 

The -PSHost опции отправляет вывод на хост, так что вы можете увидеть его.

Возможно, вы захотите не использовать это в своем тесте Pester и поэкспериментировать с другими параметрами слушателя и методами поиска выходных данных.

+1

Обновлен ответ на использование 'ParameterBinderController' вместо' ParameterBinding', так как легче увидеть имя набора параметров таким образом. – briantist

+0

thanx. это путь моей лиги: D Мне было интересно, может ли быть какое-то простое и относительно элегантное решение. играя с шикарным в эти дни - пытаясь сделать «обертку» для приложения cmd и клиентом json-rpc для него, оба имеют около 50+ параметров/опций/методов. плюс я хотел взглянуть на pester –

+0

@JaquelineVanek Я думаю, что это может сработать для вас. Если вы пишете тесты Pester, то «Trace-Command» не выходит из вашей лиги. Мне бы очень хотелось увидеть тест Pester на самом деле; Я думаю, это было бы очень полезно. – briantist

 Смежные вопросы

  • Нет связанных вопросов^_^