C/C++单元测试工具Visual Unit 4在线帮助


异常处理逻辑

    异常处理代码形成了特殊的分支结构。

try块与catch块
    从代码格式上看,好像是try块和catch块构成了一个分支结构,但实际上,try块只是一个范围,而catch块单独构成了一个分支结构,如下图。

“e”标记
    标有“e”标记的语句块,表示一定抛出异常或可能抛出异常:不透明的“e”表示一定抛出异常,即含有throw语句;半透明的“e”表示可能抛出异常。try块内不含throw语句的语句块都会标有半透明的“e”标记,它是可关闭的。选中一个语句块,使用 右键菜单可关闭或打开“抛出异常的可能”,关闭后“e”标记会消失。

    可能抛出异常的语句块,形成了一种特殊的分支结构,即抛出异常和不抛出异常两个分支,会造成路径数量的增加,因此,应该关闭不可能抛出异常的语句块的“e”标记。

未抛出异常的路径
    下图的当前路径是未抛出异常的路径,这种路径不会进入catch结构(图中用虚线表示跳过某个分支结构)。
   
抛出了异常的路径
    下图是抛出了异常的路径,红色的“e>>”标示了抛出异常的具体位置。抛出异常后,该路径将跳过后面的所有代码,直到进入catch结构。如果有对应的catch分支,经过处理后,该路径将恢复正常。如果没有对应的catch分支,或进入catch分支后再次抛出异常,该路径又会跳过后面的代码,这种异常就需要由上级函数来处理了。
   
不要将可能产生异常的语句放在分支判定中
    逻辑结构图未考虑由分支判定中的语句产生异常的情形,这种情形无法在逻辑结构图上表达,如果某个测试用例产生了从条件抛出的异常,它的路径将视为不存在,逻辑结构图中不会画出该用例所对应的路径,最好不要将可能产生异常的语句放在分支判定中。

相关代码
   下面是对应于上述逻辑结构图的完整代码: