有没有办法嘲笑$?使用Pester返回?

时间:2017-06-06 16:03:26

标签: powershell pester

我正在使用Pester为PowerShell应用程序编写测试。

我已经能够为大多数功能创建模拟,但我还没有能够模拟返回 $?变量的函数。我目前正在使用它来评估AWS CLI命令的回报。

例如,这是模拟失败的AWS CLI命令返回。

有什么想法吗?

3 个答案:

答案 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