如何测试解析后的参数集?
How to test the resolved parameter set?
我正在尝试编写一个基本的 Pester 测试来检查 "advanced" 函数的已解析参数集:
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
}
}
谢谢。任何建议将不胜感激,因为我对 Pester 是全新的。 ...在豪华和编码方面也没有好多少:D
使用如下:
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.
}
您将为此使用 the Trace-Command
cmdlet。
-Name
参数将设置为 ParameterBinderController
。
作为开始的一种方式,尝试这样的事情(在纠缠之外)
Trace-Command -Name ParameterBinderController -Expression { Do-Stuff -S2 } -PSHost
-PSHost
选项将输出发送到主机以便您可以看到它。
您可能不想在您的 Pester 测试中使用它,而是尝试使用其他侦听器选项和捕获输出的方法。
下面将测试你是否对参数S2使用'Set 2':
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 是否确实在执行 'set 2',当你这样设置时,不是纠缠测试恕我直言的主题......
我正在尝试编写一个基本的 Pester 测试来检查 "advanced" 函数的已解析参数集:
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
}
}
谢谢。任何建议将不胜感激,因为我对 Pester 是全新的。 ...在豪华和编码方面也没有好多少:D
使用如下:
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.
}
您将为此使用 the Trace-Command
cmdlet。
-Name
参数将设置为 ParameterBinderController
。
作为开始的一种方式,尝试这样的事情(在纠缠之外)
Trace-Command -Name ParameterBinderController -Expression { Do-Stuff -S2 } -PSHost
-PSHost
选项将输出发送到主机以便您可以看到它。
您可能不想在您的 Pester 测试中使用它,而是尝试使用其他侦听器选项和捕获输出的方法。
下面将测试你是否对参数S2使用'Set 2':
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 是否确实在执行 'set 2',当你这样设置时,不是纠缠测试恕我直言的主题......