如何正确测试模拟的CmdLet的ErrorVariable值?

时间:2018-07-04 08:36:22

标签: powershell mocking pester

我们正在尝试在ErrorVariable测试中检查Invoke-Command的{​​{1}}中的值。但是由于一个或另一个原因,Pester未被实例化。

-ErrorVariable

即使添加了Describe 'test ErrorVariable' { Mock Invoke-Command { #[CmdletBinding()] #param ( # [String[]]$ComputerName, # $ScriptBlock #) $ErrorId = 'NetworkPathNotFound,PSSessionStateBroken' $TargetObject = 'UnknownHost' $ErrorCategory = [System.Management.Automation.ErrorCategory]::OpenError $ErrorMessage = "Connecting to remote server $TargetObject failed with the following error message : WinRM cannot process the request. The following error occurred while using Kerberos authentication: Cannot find the computer $TargetObject. Verify that the computer exists on the network and that the name provided is spelled correctly. For more information, see the about_Remote_Troubleshooting Help topic." $Exception = New-Object -TypeName System.InvalidOperationException -ArgumentList $ErrorMessage $ErrorRecord = New-Object -TypeName System.Management.Automation.ErrorRecord -ArgumentList $Exception, $ErrorId, $ErrorCategory, $TargetObject $ErrorRecord } it 'should be green because it should contain the TargetObject' { Invoke-Command -ComputerName TestComputer -ScriptBlock {1} -ErrorVariable ConnectionError $ConnectionError.TargetObject | Should -Be 'UnknownHost' } } 选项,它仍然没有被填充。我们在这里想念什么?

1 个答案:

答案 0 :(得分:2)

您应该使用Write-Error

Describe 'test ErrorVariable' {
    Mock Invoke-Command {
        $ErrorId = 'NetworkPathNotFound,PSSessionStateBroken'
        $TargetObject = 'UnknownHost'
        $ErrorCategory = [System.Management.Automation.ErrorCategory]::OpenError
        $ErrorMessage = "Connecting to remote server $TargetObject failed with the following error message : WinRM cannot process the request. The following error occurred while using Kerberos authentication: Cannot find the computer $TargetObject. Verify that the computer exists on the network and that the name provided is spelled correctly. For more information, see the about_Remote_Troubleshooting Help topic."
        $Exception = New-Object -TypeName System.InvalidOperationException -ArgumentList $ErrorMessage

        Write-Error -ErrorId $ErrorId -TargetObject $TargetObject -Category $ErrorCategory -Message $ErrorMessage -Exception $Exception
    }

    it 'should be green because it should contain the TargetObject' {
        Invoke-Command -ComputerName TestComputer -ScriptBlock {1} -ErrorVariable ConnectionError -ErrorAction SilentlyContinue
        $ConnectionError.TargetObject | Should -Be 'UnknownHost'
    }
}