1

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

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

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

有什么想法吗?

4

3 回答 3

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 窗口(因为它在执行时将所有内容复制粘贴为一个命令)。

于 2017-06-06T16:36:28.910 回答
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 实例的单元测试:)

于 2017-06-07T12:44:54.447 回答
0

你应该能够做到:

Mock AWC-CLI { $ = $true } -Verifiable
于 2017-06-06T16:21:36.377 回答