VBScript 的异常传递与处理

转载自:http://blog.csdn.net/roger_ge/article/details/5497730

前些天在51testing博客上看到网友aslandhu一篇关于QTP和WatiN比较的博文(http://www.51testing.com/?uid-194902-action-viewspace-itemid-133294),其中讲述到QTP所使用的VBScript有一个缺点,就是没有很好的异常处理机制。这可不得了,要知道,对于那些数层,数十几层的函数调用来说,要是没有很好的异常传递与处理机制,那中间层的函数的逻辑处理将变得非常棘手!如果想搭建易维护的测试框架的话,异常传递处理肯定是要跨过的一步。VBScript事实真的不能传递异常吗?请看如下代码:

 

'脚本入口

Set thirdClass=New ThirdLevelClass

Call thirdClass.FinalFunction

 

'在底层的操作中抛出异常

Class FirstLevelClass

         Sub ThrowException()

                   Err.Raise vbObjectError+1, "FirstLevelClass", "This is user define exception" '抛出自定义错误

                  

                   '实际上以下这段输出不会执行到,这正是我们想要的结果:

                   '当底层发生异常时,应该停止一切执行操作,向上层传递异常,有顶层类去处理

                   WScript.Echo "this is first level class, and throw exception"

         End Sub

End Class

 

'本类不处理底层类抛出的异常,因为顶层类会处理的

Class SecondLevelClass

         Sub ThransferException

                   Set firstClass=New FirstLevelClass

                   Call firstClass.ThrowException

                  

                  '以下这段输出同样也不会执行到,这同样也是我们希望看到的

                   WScript.Echo "this is second level class, and transfer exception"

         End Sub

End Class

 

'顶层类集中处理有底层类传递上来的异常

Class ThirdLevelClass

         Sub FinalFunction

                   On Error Resume Next '忽略错误,继续执行

                   Set secondClass=New SecondLevelClass

                   Call secondClass.ThransferException

                  '处理异常,模拟高级语言中的Catch功能

                   If Err.Number<>0 Then

                            WScript.Echo Err.Source & " throw exception: " & Err.Number & "," & Err.Description

                   End If

                   On Error Goto 0 '去除忽略错误,即使On Error Resume Next语句失效

         End Sub

End Class

 

运行这段脚本的结果如下:

FirstLevelClass throw exception: -2147221503,This is user define exception

 

事实证明VBScript有着和高级语言一样的异常传递机制

你可能感兴趣的:(exception,脚本,Class,VBScript,语言,testing)