2
Set-Location "C:\thisDirDoesNotExist"
If(-not $?)
{
    Write-Error -Message "error"
    Exit 1
}

コマンドの失敗をモックするにはどうすればよいですか? 上記のコードでは、Set-Location コマンドが非終了エラーでエラーになります。$? 変数が false に設定され、エラー メッセージが出力されてスクリプトが終了します。

Set-Location コマンドをモックして $ を設定するにはどうすればよいですか? 変数を false にしますか?

4

3 に答える 3

0

通常、エラーを生成するためのモックと、エラーが発生したことを確認するためのテストは次のようになります。

テストコード

Describe 'mock an error' {
    Context 'terminating error' {
        Mock -CommandName Set-Location -MockWith {Write-Error 'My Error' -ErrorAction 'Stop'} 

        it 'should throw' {
            {Set-Location -Path .\foo -ErrorAction Stop} | should throw 'My Error'
        }
    }

    Context 'non-terminating error' {
        Mock -CommandName Set-Location -MockWith {Write-Error 'My Error' } 

        it 'should throw' {
            {Set-Location -Path .\foo -ErrorVariable slError
            $Global:slError=$slError} | should not throw
            $global:slError.count |should be 1
            $Global:slError[0].Exception.Message | should be 'My Error'
        }
    }
}

結果

Describing mock an error
   Context terminating error
    [+] should throw 551ms
   Context non-terminating error
Write-Error 'My Error'  : My Error
At C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Functions\Mock.ps1:1056 char:9
+         & $___ScriptBlock___ @___BoundParameters___ @___ArgumentList_ ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

    [+] should throw 164ms
于 2016-06-01T07:13:34.860 に答える
0

を使用Throwして、必要なエラーを強制できます。$? の後に False になりThrowます。

于 2016-05-17T12:56:19.237 に答える