我有一套測試DLL,它是通過Start-Process
命令調用OpenCover.Console.exe的powershell腳本運行的。
我有-returntargetcode
標誌設置
執行後,我檢查$lastexitcode
和$?
。他們一直分別返回1和True。即使測試失敗。
$lastexitcode
不應該$lastexitcode
當所有的測試通過時爲0,當它們失敗時爲1?
我有一套測試DLL,它是通過Start-Process
命令調用OpenCover.Console.exe的powershell腳本運行的。
我有-returntargetcode
標誌設置
執行後,我檢查$lastexitcode
和$?
。他們一直分別返回1和True。即使測試失敗。
$lastexitcode
不應該$lastexitcode
當所有的測試通過時爲0,當它們失敗時爲1?
默認情況下,Start-Process
是異步的,所以它不會等待您的進程退出。如果希望您的命令行工具同步運行,請刪除Start-Process
並直接調用該命令。這是它設置$LASTEXITCODE
的唯一方法。例如,造成的CMD.exe退出以2:
cmd /c exit 2
$LASTEXITCODE
您可以通過添加-Wait
標誌使Start-Process
synchonous,但它仍然不會」設置$ LASTEXITCODE。要從Start-Process獲得ExitCode,您需要將-PassThru
添加到您的Start-Process
,然後輸出[System.Diagnostics.Process]
對象,您可以使用該對象監視該流程,並(最終)訪問其ExitCode
屬性。這裏有一個例子,應該幫助:
$p = Start-Process "cmd" -ArgumentList "/c exit 2" -PassThru -Wait
$p.ExitCode
當然,這種做法的好處是,你並不需要等待的過程,但後來當它離開你有關於它在$p
運行信息。
這是-PassThru爲我修好了!謝謝 – lucas