转载自: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有着和高级语言一样的异常传递机制