VBScript 的异常传递与处理

          前些天在51testing博客上看到网友aslandhu一篇关于QTPWatiN比较的博文(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有着和高级语言一样的异常传递机制

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值