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")
大家可以执行看看是什么结果。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/