powershell - 如何在Powershell中使用Pester模拟ErrorRecord?

标签 powershell unit-testing error-handling pester

我有一个要包含在单元测试中的函数,但是我不知道该怎么做。该方法接收一个ErrorRecord对象(来自Invoke-RestMethod调用),获取状态码并生成自定义错误消息。 call 的第一部分如下所示:

function Resolve-RestError {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $RequestError
    )
    $statusCode = $requestError.Exception.Response.StatusCode.value__
    switch ($statusCode) {
我遇到的问题是ErrorRecord对象的重新生成。我花了很多时间寻找重新创建错误对象的方法,但是我无法准确地重新创建它。
在执行期间的实际ErrorRecord对象中,访问Response.StatusCode字段将返回带有代码描述的字符串。要访问实际值,您需要调用Response.StatusCode.value__。似乎无法重建内部.value__变量,因为这是由JIT编译器完成的(据我了解)。有没有一种方法可以将.value__属性添加到自定义对象,或者在测试过程中仅模拟该变量?

最佳答案

没错,重新创建一个ErrorRecord对象似乎不是太简单。对于这种情况,我的选择是模拟要在测试中模拟的输出,然后通过Export-CliXml存储该结果,但是在尝试使用ErrorRecord进行操作时,您只能得到Exception.Response,其余的将在转换中丢失(甚至在设置-Depth值时)。
可能有一种更聪明的方法,但是一种解决方法是按照以下步骤伪造对象(请注意,您没有提供完整的功能,因此我只是创建了它的简化版本以证明它适用于此特定情况):

function Resolve-RestError {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $RequestError
    )
    $statusCode = $RequestError.Exception.Response.StatusCode.value__

    Return $statusCode
}

Describe 'Resolve-RestError' {

    It 'Should handle a 404' {

        $ErrorRecord = [pscustomobject]@{ 
            Exception = @{
                Response = @{
                    StatusCode = @{
                        value__ = 404
                    }
                }
            }
        }
        
        Resolve-RestError -RequestError $ErrorRecord | Should -Be 404
    }
}

关于powershell - 如何在Powershell中使用Pester模拟ErrorRecord?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62577300/

相关文章:

c# - 在使用 Powershell.Invoke() 调用的 powershell 脚本执行中发生终止错误时如何避免 .NET exe 崩溃

javascript - 如何使用 Jasmine.js 对 Javascript Promises 进行单元测试?

swift - 使用 Realm Swift 预加载数据库

python - 有没有办法在 TestCase 之外使用 Python 单元测试断言?

sql - Oracle SQL开发人员: stop script running if error

error-handling - 类型错误 : ',' expected when running yarn build

arrays - powershell.exe -file 字符串数组作为参数

powershell - 如何以编程方式更改 Azure SQL 数据库的层

Powershell 正确关闭 Sharepoint 文档

c# - xUnit - 在测试中提取和实现接口(interface)