SilkTest点滴16 – 用Raise和Reraise抛出异常

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”)
大家可以执行看看是什么结果。

Leave a comment

请输入正确的验证码