自从上一篇博客《代码覆盖率从简到繁(一)》以来,很久没有再写相关的内容了,今天再继续一篇,呵呵!我们知道,根据覆盖度量单元的不同,代码覆盖可以分为很多种,如:语句覆盖、判定覆盖、条件覆盖、路径覆盖等等,Visual Studio(2005,2008 和 2010)系列工具中所采用的是语句覆盖(statement coverage),也被称为block coverage。相对于其它覆盖而言,block覆盖操作和分析简单,是实际工程中比较常用的一种覆盖测试工具。那么究竟一个block是如何定义的呢? block与代码行之间存在着对应关系吗?先来看看下面一个例子:
首先,自定义一个简单的C#函数GetInteger() 作为接下来被测试和代码覆盖收集的对象:
view plaincopy to clipboardprint? |
然后, 针对这个GetInteger编写一个简单的单元测试用例,输入的数据组合为 (arg1=1, arg2=-1)
view plaincopy to clipboardprint? [TestMethod] public void GetIntegerTest() { Program target = new Program(); int expected = 0; int actual = target.GetInteger(1, -1); Assert.AreEqual(expected, actual); } |
下面执行GetIntegerTest测试,看看这个用例到底覆盖了GetInteger中的哪些代码。执行的代码覆盖结果如下图所示:
Visual Studio使用不同的颜色来区分不同的覆盖结果:
● 淡蓝色:表示整行代码都被执行到了;
● 米色: 表示这行中的部分block被执行了;
● 红棕色:表示整行代码都没有被执行;