我正在使用Pester为PowerShell应用程序编写测试。
我已经能够为大多数功能创建模拟,但我还没有能够模拟返回 $?变量的函数。我目前正在使用它来评估AWS CLI命令的回报。
例如,这是模拟失败的AWS CLI命令返回。
有什么想法吗?
答案 0 :(得分:2)
如果您正在寻找与$?
执行相同功能的模拟代码,您可以使用类似的东西(如果在执行多行时它实际上返回的方式非常有限一旦等等,它可能需要根据执行上下文进行修改):
Function Test-LastCommandError {
$LastCommand = (History | Select -Last 1).CommandLine
$LastError = $Error[-1].InvocationInfo.Line
$LastCommand -eq $LastError
}
1/1#Success
Test-LastCommandError # Returns false
1/0#Error
Test-LastCommandError # Returns true
这适用于我手动执行每一行,但不适用于临时ISE窗口(因为它在执行时将所有内容复制粘贴为一个命令)。
答案 1 :(得分:1)
我们创建了一个辅助函数并传递了 $?值。
function Test-LastExitCodeIsFalse ($last_exit) {
if ($last_exit) {
return $false
}
$true
}
用法正在
aws s3 <an aws command>
if (Test-LastExitCodeIsFalse($?)) {
throw "AWS Exception"
}
使用Pester,我们只是模拟Test-LastExitCodeIsFalse函数返回 false 。我们对失败的AWS实例进行了单元测试:)
答案 2 :(得分:0)
你应该可以这样做:
Mock AWC-CLI { $ = $true } -Verifiable