gpt4 book ai didi

powershell - 使用 Pester 测试强制参数

转载 作者:行者123 更新时间:2023-12-02 14:46:15 29 4
gpt4 key购买 nike

我正在尝试找出如何对缺少的参数进行 Pester 测试:

Find-Waldo.Tests.ps1

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

Describe 'Mandatory paramters' {
it 'ComputerName' {
{
$Params = @{
#ComputerName = 'MyPc'
ScriptName = 'Test'
}
. "$here\$sut" @Params
} | Should throw
}
}

Find-Waldo.ps1

Param (
[Parameter(Mandatory)]
[String]$ComputerName,
[String]$ScriptName
)

Function Find-Waldo {
[CmdletBinding()]
Param (
[String]$FilePath
)

'Do something'
}

每次我尝试断言结果或只是运行测试时,它都会提示我输入ComputerName参数,而不是使测试失败。

我在这里错过了一些非常明显的东西吗?有没有办法测试强制参数是否存在?

最佳答案

根据 Mathias 的评论,您无法真正测试是否缺少强制参数,因为 PowerShell 会提示输入而不是抛出错误。根据 comment he linked to from the Pester team您可以使用 Get-Command 来测试脚本中的强制参数设置(假设它是为该变量设置的唯一参数属性)

((Get-Command "$here\$sut").Parameters['ComputerName'].Attributes.Mandatory | Should Be $true

另一种选择是在此实例中不使用强制参数,而是使用一个脚本 block 来执行 Throw 作为参数的默认值:

Param (
[String]$ComputerName = $(Throw '-ComputerName is required'),
[String]$ScriptName
)

如果脚本始终用作自动化流程的一部分(而不是通过用户执行),这可能是首选,因为它允许您控制/捕获其行为并避免其在执行过程中卡住。然后,您可以按照最初建议的方式测试脚本:

Describe 'Mandatory paramters' {
it 'ComputerName' {
{
$Params = @{
#ComputerName = 'MyPc'
ScriptName = 'Test'
}
. "$here\$sut" @Params
} | Should throw '-ComputerName is required'
}
}

关于powershell - 使用 Pester 测试强制参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45935954/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com