Raise語句會產生一個異常,并且會將控制權交給異常處理或者是停止腳本的執行。Raise語句的原型為:
raise [integer-expr [, expr [, cmd-line]]]
其中,integer-expr是一個可選項,是你想要在錯誤處理部分拋出的異常號。
Expr:可選項,是一個關于異常的并且包含信息的任何類型表達式。你可以指定一個包含錯誤解釋的字符串,或者你可以從silktest中調用內置的4Test函數得到這些信息。
Cmd-line:可選項,一個包含命令行的表達式,如果你指定了它,結果文件將在錯誤行顯示一個圖標,當你點擊該圖標,錯誤行將被執行。
下面是一個關于raise用法的例子,這些代碼出現在raise.t的腳本中。
// this script is in a file called raise.t
testcase raiseExample () //--------------àline 1
STRING sTestValue = "xxx"
STRING sExpected = "yyy"
TestVerification (sExpected, sTestValue) //-----------àline 5
TestVerification (STRING sExpected, STRING sTestValue)
if (sExpected == sTestValue)
Print ("Test was successful")
else
raise 1, "ERROR: Test verification failed" //------------àline 11
在第5行的函數TestVerification中,由于xxx和yyy不相等,所以將在11行用raise語句拋出一個異常,該異常的號碼是11,關于該異常的相關信息是ERROR: Test verification failed。所以實際的結果文件為:
ERROR: Test verification failed
Occurred in TestVerification at raise.t(11)
Called from raiseExample at raise.t(5)
Reraise語句將再次產生一個異常,并且將控制權移交給下一個異常處理程序。當一個異常處理程序已經捕獲了原來的異常,但是你希望把控制權交給下一個異常處理程序,當然如果有的話。那么reraise將把控制權交給當前塊的下一個異常處理程序,或者是產生該異常的函數的塊。如果沒有其他的異常處理程序被發現,腳本將停止執行。
下面用一個例子來說明reraise的用法:
// This script is stored in a file called reraise.t
testcase reraiseExample ()
LIST OF INTEGER liXcept
do
BuildList (liXcept)
except
Print (liXcept)
reraise
BuildList (out LIST OF INTEGER liXcept)
const LIST OF INTEGER liNum = {...}
20
10
0
5
INTEGER i
liXcept = {}
for each i in liNum
ListAppend (liXcept, 100 / i)
很顯然在BuildList的最后一行執行到liNum[3]時會拋出一個異常,這個時候會打印此時liXcept的值,并且重拋該異常,由于沒有其他的異常處理程序了,所以腳本將會停止運行。
下面是另外一個例子:
[-] testcase Reraise ()
[ ] string xstr="xxx"
[ ] string ystr="yyy"
[-] do
[-] do
[ ] Verify(xstr,ystr)
[-] except
[ ] print("I catch the exception,i will reraise it")
[ ] reraise
[ ] print("After reraise exception here.")
[-] except
[ ] print("I get the reraised error")
大家可以執行看看是什么結果。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/